zoukankan      html  css  js  c++  java
  • .NET表单身份验证

           ASP.NET Forms 身份验证的简单实现:1)在Web.config文件中配置应用程序使用 Forms 身份验证;2)创建登陆页面,将用户身份验证票证添加到Cookie集合。

           1.配置文件中设置为Forms验证
       <authentication mode="Forms">
          
    <forms loginUrl="NetFromwork/FormLogin.aspx" defaultUrl="NetFromwork/FormLogin.aspx" name=".ASPNETFORMSTEST" protection="All" timeout="20" ></forms>
       
    </authentication>
       
    <authorization>
          
    <deny users="?"/>
       
    </authorization>

           2.验证用户合法后,将身份验证票证写入Cookie集合
        string userName = "Jimmy";
        
    //Create ticket
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(1), false"");
        
    //Encrypt the ticket.
        String encTicket = FormsAuthentication.Encrypt(ticket);
        
    //Create the cookie.
        Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
        
    //Redirect back to default or original URL.
        FormsAuthentication.RedirectFromLoginPage(userName, true);

           上述代码已经实现了简单的Forms身份验证功能。接下来我们看看票据信息构造函数FormsAuthenticationTicket()和用户重定向函数RedirectFromLoginPage()原型:
    函数FormsAuthenticationTicket()原型
    函数RedirectFromLoginPage()原型

           论坛常见的登陆有效期功能是怎么实现的呢?是通过设置哪些参数实现的呢?不禁有些迷茫,涉及到登陆有效期的参数有如下几个:函构造数FormsAuthenticationTicket()中的isPersistentexpiration,函数RedirectFromLoginPage()中的createPersistentCookie,配置文件中还有timeout属性,究竟要怎么设置才能实现“登陆一小时,一天,一个月,永久,浏览器进程”功能呢?

           下面谈谈我对这些参数的理解,通过查找网上资料,MSDN和程序测试而来,有理解错误的地方欢迎大家指正

           1.关于持久Cookie,并不是说isPersistent=True或者createPersistentCookie=True时,就能够保持永久登陆状态,持久Cookie解释成跨浏览器会话保存的Cookie更合适。当设置为True时,不同浏览器进程之间可以共享该Cookie,也就是说在一个IE中登陆后,在另一个IE中打开还保持登陆状态。

           2.关于函数RedirectFromLoginPage(),MSDN上解释是这样的“如果 CookiesSupported 属性为 true,并且 ReturnUrl 变量位于当前应用程序中,或者 EnableCrossAppRedirects 属性为 true,则 RedirectFromLoginPage 方法将发出身份验证票证并使用 SetAuthCookie 方法将其置于默认 Cookie 中。”
           可见,在执行函数RedirectFromLoginPage()时,会覆盖掉FormsAuthenticationTicket实例的票据信息,所以第二部分代码中,不该调用该函数,而应该用下面的代码代替:
        string userName = "Jimmy";
        
    //Create ticket
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(1), false"");
        
    //Encrypt the ticket.
        String encTicket = FormsAuthentication.Encrypt(ticket);
        
    //Create the cookie.
        Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
        
    //Redirect back to default or original URL.
        Response.Redirect(FormsAuthentication.GetRedirectUrl(userName,true ));  //代替RedirectFormLoginPage

           3.关于登陆有效时间,经过上面的修改,涉及到登陆时间的只有构造函数FormsAuthenticationTicket()的参数expiration票据过期时间和配置文件中的timeout属性了,这两个有什么关系呢?票据的有效时间是由expiration属性决定的,而timeout只有当expiration属性没有显示设置的时候才生效

           希望能给大家带来一点帮助,分析不对的地方,欢迎大家指正。参考资料:Asp.net中基于Forms验证的角色验证授权 

           源代码下载地址: 点击下载完整示例程序 (示例路径:/NetFromwork/FormLogin.aspx 
  • 相关阅读:
    JS中的prototype
    Php5.3的lambda函数以及closure(闭包)
    JavaScript事件委托的技术原理
    css 里层元素撑不开外层元素
    扩展VirtualBox虚拟机磁盘容量
    easyUI 条件查询 跟分页数据展示写在了一起的
    (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
    有想去北京工作的的想法了
    第一次写oracle SQL 两个表链接查询
    第三天 SQL小记
  • 原文地址:https://www.cnblogs.com/freshman0216/p/1224215.html
Copyright © 2011-2022 走看看