- 浏览: 615746 次
- 性别:
- 来自: 卡哇伊
-
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
在ASP.NET网站中网站管理后台需要经常验证用户身份,要实现这种功能就可以利用那个继承机制和ASP.NET的事件机制.首先定义一个需要进行身份验证的BasePage类,继承自Page类,在BasePage类的构造函数中定义它的加载事件的处理代码,这样所有继承自BasePage类的页面都能自动执行身份验证.
/// <summary> /// 验证登陆类 /// </summary> public class ValidateLogin : System.Web.UI.Page //继承自System.Web.UI.Page { public ValidateLogin() { //当页面加载时执行该事件 this.Load += new EventHandler(BasePage_Load); } //对登录进行验证 protected void BasePage_Load(object sender,EventArgs e) { if (Session["uid"] == "" || Session["uid"] == null) { Response.Redirect("~/login.aspx"); } } }
public partial class Default3 : ValidateLogin //继承自ValidateLogin类 { protected void Page_Load(object sender, EventArgs e) { //继承自ValidateLogin类,实现继承身份验证 } }
在.net内部存在一些默认机制,具体说来有如下:
(1)如果类的实例字段没有赋初始值,那么它们就会被赋默认值,对于引用类型字段的默认值为null,对于简单值类型字段(即数值类型)默认值为对应形式的0(如sbyte、byte、short、ushort、int、uint、long 和 ulong都是0,而char类型字段的默认值值是’\0x0000’,float类型字段是0.0f,double类型字段是0.0d等等)。
(2)如果类中赋初值的静态字段,那么自动生成一个静态构造函数,在静态函数中完成赋初值。
(3)如果一个类没有明确指明派生自哪个类,默认会派生自Object类。
(4)如果一个类没有定义任何构造函数,默认会给该类生成一个构造函数。
(5)在调用子类的非静态构造函数的时候,默认会调用父类的构造函数。例如A继承B,B继承C,C没有明确指明继承哪个类(实际上是继承Object),那么在实例化A的时候,会首先调用B的构造函数,在调用的构造函数的时候又会调用C的构造函数,在调用C的构造函数的时候又会去调用Object的构造函数,因此实例化一个A对象时,在内部会经历一连串的构造函数调用,就上面的继承层次来说,构造函数的调用顺序从先到后依次为:object->C->B->A。
下面这部分代码可以演示这个演示这个过程:
using System; public class C { public C() { Console.WriteLine("C"); } } public class B:C { public B() { Console.WriteLine("B"); } } public class A:B { public A() { Console.WriteLine("A"); } } public class Demo:A { static int d=5; public Demo() { } public static void Main() { Demo d = new Demo(); Console.ReadLine(); } }
将上面程序编译成控制台应用程序,执行会得到如下结果:
如果将生成的Demo.exe文件用ILDASM.exe打开的话,会看到如下情形:
上面说的这些都不是我今天要说的重点,不过我们可以它们来实现一些功能。在早期的时候我开发项目的时候,做后台身份控制的时候总是觉得比较麻烦,每页都会写检查用户是否登录的代码,后来asp.net2.0出来之后就使用了母板页,这样对用户的身份验证就可以在母板页中的Load事件中来控制。这样虽然能完成功能,不过由于母板页的Load事件是晚于内容页的Load事件的,所以这个时候验证用户身份可以看到页面上的部分内容了。
利用上面的第(5)个机制,就可以比较好的解决这个问题。我们可以首先定义一个后台所有需要进行身份验证的页的基类,这个基类继承自System.Web.UI.Page类(因为在asp.net中所有的asp.net页所对应的类必须直接或者简介继承自System.Web.UI.Page类)。我们直到当访问一个页面的时候,肯定要实例化这个页面对应的类,由于内部机制必须要首先调用我们编写的基类中定义的构造方法(如果有的话,然后又鸡生蛋、蛋生鸡一样地追朔到object类,不过那些我们不用管)。我们要下手的话,就应该在这个我们自定义的基类的构造方法里面。这时候有两种选择:
一是直接在基类的构造函数进行身份验证,比如在基类构造函数里检查Cookie或者Session集合中是否存在某个特定的名称的Session或者Cookie(用Session或者用Cookie或者二者兼用取决于具体项目要求),这个特定名称的Session或者Cookie是当用户登录了后台时才会设定的,因此只要存在这个Cookie或者Session就可以判断用户是登录过的。
二是再利用一些机制来做,比如在基类的构造函数中再利用一个asp.net页面的生命周期中必经的事件来进行处理。比如这个在构造函数中定义基类的某个事件的处理方法,在这个处理方法中进行身份判断。
我记得有人说过这么一句话:“最直接的方法往往是最难的方法。”上面的办法中,第一种是实现不了的,因为构造函数调用的时候,很多信息刚刚被初始化,有很多还没有被初始化,在基类的构造方法中Session和Cookie都是没有被实例化的。
看来只有用第二种办法了,看过《asp.net夜话之五:Page类和回调技术》之五的朋友应该有印象,所有的Page类都会经历一个加载事件,我们就选择在基类的构造函数中定义基类的加载事件的处理方法,在这个方法里检查用户是否登录。至于为什么要选择这个事件而不用其它事件,那是因为有些事件发生得还是太早,怕Session和Cookie还是不可用,有些事件又太晚,用加载事件是刚刚好(郭德钢有一首歌正好叫《刚刚好》,呵呵)。
因为我们的这个基类没有任何显示部分代码,所以我们可以在项目中添加一个类文件,代码如下:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; /// <summary> /// AdminPage是后台所有需要身份验证的页的基类 /// </summary> public class AdminPage:System.Web.UI.Page { public AdminPage() { //处理加载事件 this.Load += new EventHandler(AdminPage_Load); } void AdminPage_Load(object sender, EventArgs e) { //假设用户登录成功之后会设置一个名为“UserInfo”的Session //假设用户登录页面login.aspx位于网站根目录下的Admin文件下 if (Session["UserInfo"] == null) { //使用~来保证无论在什么目录层次进行身份验证都能跳转到后台登录页面 Response.Redirect("~/Admin/Login.aspx"); } } }
这样,对于后台任何需要进行身份验证的页面,只需将它更改为继承自AdminPage类即可,这样这些类中就不需要编写任何身份验证的代码了。
如下,就是一个类的代码,这里没有任何手动编写的代码,却已经能实现验证了,因为它继承自AdminPage类:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class Admin_News_Index : AdminPage { protected void Page_Load(object sender, EventArgs e) { } }
对上面的处理方法还可以进一步处理,比如某些页面不光要求用户必须登录,还要求用户必须具有相关权限,读者朋友可以利用这种思想去实现。此外,还可以利用这种机制做一些其它的业务处理。
发表评论
-
JS操作RadioButtonList
2009-12-16 23:25 3905function IsUpPic() { ... -
asp.net跳转页面的三种方法比较
2009-10-22 14:16 25471.Response.redir ... -
ASP.NET网站中的安全问题
2009-10-20 16:57 1197在网络经常看到网站被 ... -
新闻内容页分页的简单做法
2009-10-10 10:08 1228该例子只是提供了基本思路 很简单的做法,这个是假设数 ... -
Asp.net控件开发学习笔记(二)-控件开发基础
2009-10-03 16:49 1349接上篇…….. 看System.Web.UI.Ht ... -
Asp.net控件开发学习笔记-控件开发基础(一)
2009-10-03 16:33 1253服务器控件开发基础 当开发一个服务器控件时,首 ... -
Asp.net用户退出,清空Session,重定向登陆页面
2009-09-28 16:22 4185protected void Page_Load(object ... -
frameset中的aspx无法Postback
2009-09-28 16:07 1508<frameset cols="150,*&q ... -
.net页面定时刷新的几种简单方式
2009-09-28 11:20 59321: window.setTimeout("win ... -
动态添加TextBox
2009-09-21 16:30 1692方法1: 前台代码: <f ... -
浅谈ASP.NET管道优化
2009-09-20 21:43 1019ASP.NET管道优化 位于请求管道中的很多ASP.NET默 ... -
Asp.net 页面返回到上一页面
2009-09-20 21:20 921/// <summary> / ... -
PrecompiledApp.config文件和Global.asax 文件中的事件的关联
2009-09-19 10:24 2796在用Microsoft Visual Studio 2005开 ... -
gridview列 数字、货币和日期 显示格式
2009-09-11 17:05 1543在设置gridview等数据绑定控件的模版列时,总要 ... -
ASP.NET 打开新窗口几种方法
2009-09-09 21:44 3351ASP.NET打开新窗口方法一: Response ... -
response.addHeader("Content-Disposition","attachment; filename="+filename)中的中文乱码
2009-08-31 15:10 3269两种解决方法 1.如果web.config里utf-8 直接S ... -
技巧和诀窍:如何在VS 2005 SP1中使用VS的web服务器运行一个相对于根目录“/”的网站
2009-08-31 08:29 871大家常有一个疑问,是 ... -
Request.ServerVariables详细说明及代理
2009-08-14 10:46 2153ServerVariables是环境变量的集合。允许读取HTT ... -
DataList和Repeat无数据时提示暂无数据几种方法
2009-08-11 18:45 25791.放一个label DataTable table ... -
Asp.Net中清空所有textbox的几种方法
2009-08-08 08:53 5198用反射: FieldInfo[] info ...
相关推荐
本篇文章将深入探讨如何在ASP.NET中实现有效的身份验证方案。 ### 1. 基于表单的身份验证(Forms Authentication) ASP.NET中最常用的身份验证方式是基于表单的身份验证。这种机制允许开发者使用自定义登录页面来...
在ASP.NET中,基于Forms的身份验证提供了一种灵活的方式来控制应用程序的访问权限,尤其是在需要支持非Windows用户身份验证的情况下。这种验证方式不依赖于Windows集成安全,而是通过自定义的登录页面和会话管理机制...
在ASP.NET中实现Url Rewriting是一项重要的技术,它允许开发者将复杂的、动态生成的URL转换为简洁、易于理解和搜索引擎友好的格式。这篇文章主要探讨了如何在ASP.NET环境中使用HttpModule和HttpHandler来实现这一...
在ASP.NET中实现SSO,通常需要解决跨站点的身份验证和状态同步问题。以下是一个简单的实现步骤和代码分析: 1. **流程概述**: - 用户尝试访问System中的任何子站点(如Shop或Office)。 - 如果用户未登录,系统...
10. **ASP.NET Identity**:这是ASP.NET内置的身份验证系统,用于处理用户注册、登录和其他身份验证相关任务。 11. **ASP.NET Web API**:如果需要构建RESTful服务,ASP.NET Web API是理想的选择。它允许开发者用...
【ASP.NET+C#实现的超市管理系统详解】 ASP.NET是由微软公司开发的一种Web应用程序框架,它构建在.NET Framework之上,主要用于构建动态网站、Web应用程序和Web服务。C#是一种面向对象的编程语言,与.NET Framework...
6. 身份验证与授权:在"身份证地区验证.xls"中,可能涉及的是用户身份验证的实现,ASP.NET提供了身份验证和授权机制,如Windows身份验证、Forms身份验证,以及角色管理和权限控制。 7. SQL:SQL是结构化查询语言,...
本篇将详细介绍如何在ASP.NET应用中集成AD进行用户身份验证,并提供一种自定义类的方法来实现这一过程。 #### 一、背景 随着企业信息化建设的发展,越来越多的企业选择使用Active Directory作为统一的身份认证平台...
在ASP.NET MVC中,模型类通常会继承自`System.ComponentModel.DataAnnotations`命名空间中的特性,以便进行数据验证。 2. **视图(View)**:视图是用户界面,负责呈现数据。它通常由HTML、CSS和JavaScript组成,...
ASP.NET提供内置的身份验证和授权机制,可以轻松实现这一功能。 6. AJAX:为了实现无刷新更新,项目可能用到AJAX(异步JavaScript和XML),它允许部分网页更新,提高用户体验。 7. 版本控制:项目中可能包含版本...
`web.config`是ASP.NET应用的配置文件,包含了应用程序的全局设置,如数据库连接字符串、身份验证模式和其他配置信息。开发者可能在这里定义了数据库连接,使得ASP.NET页面能够顺利访问数据库。 `MasterPage.master...
10. **安全性**:ASP.NET提供了一系列的安全特性,如身份验证、授权、AntiForgeryToken防止跨站请求伪造(CSRF)等,以确保应用程序的安全。 本教程《ASP_NET 基础教程——Visual Basic_NET 案例版》可能通过实例和...
在“ASP.NET 2.0驾校”中,你可能会学到如何利用这些特性来构建功能丰富的Web应用程序,包括如何创建页面、使用母版页、处理用户输入、执行数据绑定、实现用户身份验证和角色管理,以及如何调试和优化ASP.NET 2.0...
ASP.NET提供了多种安全机制,如身份验证、授权、角色管理等,以确保应用程序的安全运行。学习如何设置这些功能并防止常见的Web攻击是每个ASP.NET开发者必须掌握的技能。 这份ASP.NET电子教案,通过PPT的形式,详细...
2. **ASP.NET Core MVC**:是ASP.NET Core中的MVC实现,它提供了更轻量级、高性能的Web开发框架,支持.NET Core和.NET Framework,具备跨平台能力。 3. **项目创建和启动**:通过Visual Studio或命令行工具如dotnet...
7. **安全性**:新闻网站的安全性不容忽视,ASP.NET提供了身份验证、授权、加密解密、防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全机制。 8. **部署与发布**:完成开发后,需要将应用程序部署到IIS服务器...
10. **安全性**:了解ASP.NET的安全特性,如身份验证、授权、角色管理等,以及如何防止SQL注入和跨站脚本攻击。 通过阅读"ASP.NET(C#版)(张登辉,沙嘉祥)"这本书,你将逐步深入这些主题,通过案例实践提升技能。...
ASP.NET内置了身份验证和授权机制,支持Forms Authentication、Windows Authentication等。 8. **CSS和JavaScript**:用于页面样式和交互效果的实现。CSS文件负责布局和样式,JavaScript则处理用户交互,如表单验证...
8. **安全性**:学习如何实现身份验证、授权、加密和解密,以及防止SQL注入和跨站脚本攻击等安全措施。 9. **性能优化**:掌握ASP.NET性能优化技巧,如缓存策略、页面压缩和减少数据库查询等。 10. **调试与日志...
在传统的ASP.NET WebForms中,我们通常利用web.config配置文件来实现用户身份验证和授权,如使用Membership功能。然而,ASP.NET MVC并不依赖于物理页面和文件结构,而是由控制器(Controller)和视图(View)动态...