新微赢技术网

标题: ASP.Net:基于窗体的身份验证 [打印本页]

作者: √碧水寒潭    时间: 2009-3-16 22:20
标题: ASP.Net:基于窗体的身份验证
基于窗体的验证是最为普遍的一种验证,使用这种验证方式可以很方便灵活地应用到应用程序中。窗体验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。
    要采用窗体验证,先要在应用程序根目录中的Web.config中做相应的设置:
     <authentication mode="forms">
<forms name=".ASPXAUTH " loginUrl="/Login.aspx" timeout="30" path= "/">
</forms>
</authentication>

    其中<authentication mode= "Forms"> 表示本应用程序采用Forms验证方式。
   (1)<Forms>标签中的name表示指定要用于身份验证的 HTTP Cookie。默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中。一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的。

    再看一下身份验证票都包含哪些信息呢,我们看一下FormsAuthenticationTicket类:
    CookiePath: 返回发出 Cookie 的路径。注意,窗体的路径设置为 /。由于窗体区分大小写,这是为了防止站点中的 URL 的大小写不一致而采取的一种保护措施。这在刷新 Cookie 时使用。
    Expiration: 获取 Cookie 过期的日期/时间。
    IsPersistent: 如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内。
    IssueDate: 获取最初发出 Cookie 的日期/时间。
    Name: 获取与身份验证 Cookie 关联的用户名。
    UserData :获取存储在 Cookie 中的应用程序定义字符串。
    Version: 返回字节版本号供将来使用。
   (2) <Forms>标签中的loginUrl指定如果没有找到任何有效的身份验证Cookie,为登录将请求重定向到的 URL。默认值为 Login.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的 Cookie,最后将浏览器重定向到用户初试请求的页面,一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作。RedirectFromLoginPage 方法含有3个参数,函数定义如下:
    public static void RedirectFromLoginPage( string userName, bool createPersistentCookie, string strCookiePath )其中:
    userName: 就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称;
    createPersistentCookie:标示是否发出持久的 Cookie。若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期有cookie的Expires决定,RedirectFromLoginPage方法给Expires属性设定的是50年有效期;
作者: 痴情浪子    时间: 2009-11-27 17:05
好得不能再好的好帖!




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2