浅谈ASP.NET Forms验证
ASP.NET Forms验证
用户验证是每一个项目必须的一个模块,由于已经很久没有碰到这一块内容,今天写一个用户验证居然脑子一片空白。于是乎就和一个同事进行了一片讨论,晚上回家决定把讨论的结果给记录下来,以备后来之需。在ASP.NET中有几种用户验证的方法:Windows验证,Forms验证和Passport验证。当然用户也可以自定义与验证方法,而最常用的莫过于Forms验证,这也是今天所要讨论的验证方式。
ASP.NET Forms验证方式首先要配置的是web.config文件,把authentication节点配置为Forms验证,而它默认的是Windows验证。再修改配置文件时,还要注意大小写,因为XML文件是大小写敏感的,修改后authentication节点如下所示,其中还包含了一些form的配置参数。
<authenticationmodeauthenticationmode="Forms"> <forms protection="All" timeout="20" name=".XDOTNET" loginUrl="SignIn.aspx" defaultUrl="Default.aspx" path="/" requireSSL="false" enableCrossAppRedirects="false" > </forms> </authentication>
关于forms节点的属性在后面介绍FormsAuthetication类的有关成员时,再介绍它们的用处。用户验证,顾名思义就是验证用户的合理性,当用户登录到网站时,验证输入的用户名和密码是否和数据库中存储的数据相符合。其实很简单,有一种快速的方法,这种验证方法很适合后台管理的验证,因为当我们关闭浏览器时验证就会失效。
publicstaticboolValidUser(stringuserName,stringpassword) { if(!string.IsNullOrEmpty(userName)&&!string.IsNullOrEmpty(password)) { password=FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5"); stringrealPassword=Users.GetUser(userName).Password; if(string.Compare(password,realPassword,true)==0) { FormsAuthentication.SetAuthCookie(userName,false); returntrue; } } returnfalse; }
上面的方法就可以验证以32位MD5加密的Password的数据验证,其中Users.GetUser(string)这个方法是通过用户名从数据库中取得用户实例。当用户合理时,通过FormsAuthentication.SetAuthCookie方法将为用户(以用户名)创建一个身份验证票证,并将其添加到响应的 Cookie 集合或 URL(cookieless)。这样就实现了用户验证的过程,那么我们怎么得到用户是否通过验证呢?微软把程序不断的进行封装,不断的傻瓜化,当然想得到当前用户是否通过验证也很简单,代码如下:
public static bool IsAuthenticated() { return HttpContext.Current.User.Identity.IsAuthenticated; }
是不是很简单呢?当用户(只要后台管理验证的情况下)验证只要这两个步骤就OK了,当用户登录如调用ValidUser方法,当载入页面时通过 IsAuthenticated方法判断当前用户是否通过验证。这样一个用户验证模块也就完成了,但是在现代的网络中,用户是相当的值钱的东东,每个网站都会想留住很多的用户;有时有些东西只允许会员才能够查看等等,这样就需要更好的验证。使用户关闭浏览器后,在一段特定时间内还处于通过验证状态。这就需要操作和设置验证的票据FormsAuthenticationTicket,代码如下:
public static bool ValidUser(string userName, string password) { if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password)) { password = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5"); string realPassword = Users.GetUser(userName).Password; if (string.Compare(password, realPassword, true) == 0) { FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(20), false, null//可以将Roles按","分割成字符串,写入cookie ); string data = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, data); cookie.Path = FormsAuthentication.FormsCookiePath; cookie.Domain = FormsAuthentication.CookieDomain; cookie.Expires = ticket.Expiration; HttpContext.Current.Response.Cookies.Add(cookie); return true; } } return false; }
从代码中看到的FormsCookiePath,CookieDomain等等就是从配置文件中获得,关于其它的FormsAuthentication成员可以访问MSDN(FormsAuthentication)。我们同样也可以通过HttpContext.Current.User对象来判断当前用户的状况,也可以用IsInRole方法来判断用户的角色。当然当我们验证用户后,要把用户加入到Http上下文HttpContext的当前请求的User对象中,代码如下:
FormsIdentity identity = new FormsIdentity(ticket); GenericPrincipal user = new GenericPrincipal(identity, new string[] { }); HttpContext.Current.User = user;
这样就完成了ASP.NET Forms验证的全过程。至于查看用户的Cookie判断用户是否存在记录状态(如:记录1个月,1天,1年等等),可以在管道中进行判断和编写,这里就不再赘述。OK,由于时间的关系,就记录这些,如果有什么错误或更好的方法请大家指出,谢谢。
浅谈ASP.NET Forms验证相关推荐
- 浅谈ASP.NET的内部机制(一)
浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...
- 浅谈ASP.NET的内部机制(二)
浅谈ASP.NET的内部机制(二) 前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的. ...
- 浅谈ASP.NET内部机制(五)
浅谈ASP.NET内部机制(五) 前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 系 ...
- ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
一.什么是单点登录 单点登录就是在多个web应用程序中,实现统一登录方式,一但登录了某web应用程序,其它相关联的web应用程 序都无需再次登录,一个地方退出,所有相关联的web应用程序都退出. 二. ...
- 浅谈ASP.NET的Postback
说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈 ...
- 【呆子化雨】浅谈Discuz插件开发-邮件验证提醒插件
插件功能介绍: 这是一款提醒用户验证邮箱的插件,主要是当未验证邮箱的用户访问论坛时,会自动弹出提示框,提醒用户验证邮箱,后台可以设置弹出提示后,是否自动对该用户发送验证邮箱的邮件,设置是否发送邮件后根 ...
- 当ASP.NET Forms验证方式遭遇苹果IOS
一.问题出现 我在用ASP.NET MVC4做微信开发的时候,用Forms验证方式做为authentication. 一般都是在web.config加: <authentication mode ...
- 浅谈ASP.NET中render方法
2011-06-08 11:36 runyl 博客园 我要评论(1) 字号:T | T Control.Render 方法是将服务器控件内容发送到提供的HtmlTextWriter 对象,此对象编写将 ...
- 浅谈ASP.NET 缓存技术
缓存是指系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能构快速的获取数据.它的弊端在于显示的内容可能不是最新,最精确的.ASP.Net 缓存主要分为两大类: 网页输出缓存和应 ...
最新文章
- NetBeans 时事通讯(刊号 # 20 - Aug 11, 2008)
- Vijos p1165 火烧赤壁 离散化+单调栈
- Struts2+Spring2.5+Hibernate3.1实现登陆示例
- DBCP使用BasicdataSource连接(两种单例模式-----饿汉和懒汉模式)
- 第二十八讲 解非齐次线性方程组
- mysql备份命令和还原命令_mysql数据备份和还原命令
- OpenSSL漏洞补救办法详解(转)
- Andriod之import android.support.v4或者import android.support.v7提示导入错误解决办法
- ecs服务器数据迁移_某国际物流集团的云迁移解决方案
- 大数据学习笔记:ZooKeeper练习
- xml格式报文的拼装,和解析成实体类
- 在线数据库链接字符串查询
- Vquery PHP 简单爬虫类
- python xlwt使用_Python使用xlwt模块 操作Excel文件
- led伏安特性实验误差分析_大学物理实验伏安特性曲线的误差分析以及小结要怎么写,谢谢^ω^...
- 环境变量配置文件的作用-L63
- 越王勾践剑“千年不腐”传奇
- Pygame实战之外星人入侵NO.9——消灭外星人
- Qt之高仿QQ系统设置界面
- 音乐社会计算机英语,计算机音乐技术应用,Computer music technology application,音标,读音,翻译,英文例句,英语词典...
热门文章
- vs为什么打了断点不断_为什么西餐厅里的牛排又嫩又多汁?原来大厨都做了“这一步”...
- 06_pandas入门教程,引包,使用DataFrame和Series做一些事情
- solr快速入门的地址,spring-data/solr
- 虚拟机克隆,并设置新的ip,配置hostname,配合hostname,hosts
- override,final的使用,两者都是针对虚函数,也就是说要有virtual关键字
- linux读文件整个过程,linux下文件资料传输实现全过程
- sql 问号的使用 php_PHP中bindParam和bindValue的区别
- pmbook 知识领域 第六版_PMP项目管理10大知识领域脑图
- MSB8036 The Windows SDK version 10.0 was not found. Install the required version of Windows SDK o
- 提升语义分割性能的几种方法