.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()原型
        //
        // 摘要:
        //     使用 cookie 名、版本、目录路径、发布日期、过期日期、持久性以及用户定义的数据初始化 System.Web.Security.FormsAuthenticationTicket
        //     类的新实例。
        //
        // 参数:
        //   version:
        //     票证的版本号。
        //
        //   name:
        //     与身份验证票关联的用户名。
        //
        //   userData:
        //     存储在票证中的用户特定的数据。
        //
        //   isPersistent:
        //     如果票证将存储在持久性 Cookie(跨浏览器会话保存),则为 true;否则为 false。如果该票证存储在 URL 中,将忽略此值。
        //
        //   issueDate:
        //     票证发出时的本地日期和时间。
        //
        //   cookiePath:
        //     票证存储在 Cookie 中时的路径。
        //
        //   expiration:
        //     票证过期时的本地日期和时间。
        public FormsAuthenticationTicket(int version, string name, DateTime issueDate, DateTime expiration, bool isPersistent, string userData, string cookiePath);
函数RedirectFromLoginPage()原型
 //
        // 摘要:
        //     将经过身份验证的用户重定向回最初请求的 URL 或默认 URL。
        //
        // 参数:
        //   userName:
        //     经过身份验证的用户名。
        //
        //   createPersistentCookie:
        //     若要创建持久 Cookie(跨浏览器会话保存的 Cookie),则为 true;否则为 false。
        public static void RedirectFromLoginPage(string userName, bool createPersistentCookie);

论坛常见的登陆有效期功能是怎么实现的呢?是通过设置哪些参数实现的呢?不禁有些迷茫,涉及到登陆有效期的参数有如下几个:函构造数FormsAuthenticationTicket()中的isPersistent和expiration,函数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属性没有显示设置的时候才生效。

摘自:http://www.cnblogs.com/freshman0216/archive/2008/06/17/1224215.html
参考:http://www.cnblogs.com/liuqhui/archive/2008/07/20/1246987.html

转载于:https://www.cnblogs.com/besuccess/articles/3487535.html

.NET Forms身份验证相关推荐

  1. .net Forms身份验证不能用在应用的分布式部署中吗?

    参照网上的一些方法,使用Forms身份验证对应用进行分布式部署,发现没有成功. 应用部署的两台内网服务器:192.168.1.19,192.168.1.87,使用Nginx做负载分配,配置完全相同:每 ...

  2. 为不同目录设置Forms身份验证

    在进行Forms身份验证时,如果采用如下的方法配置web.config的话,则会出现所有的页面都要进行验证,这是用户所不能容忍的,具体代码如下: 1<authentication mode=&q ...

  3. [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证

    在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数. 2. 创建登录页. 登录页中的操作包括: 1. 验证用户名和密码是否正确. 2. 创建身份 ...

  4. Forms身份验证基本原理

    要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: <authentication mode="forms">     <fo ...

  5. 实现基于 ASP.NET Forms 身份验证的跨子域单点登录

    对于跨应用程序的 ASP.NET Forms 身份验证,相信大家应该都不陌生,几年前很多文章都介绍了如何实现,比如 MSDN 的 跨应用程序进行 Forms 身份验证,唐朝程序员 的 ASP.NET站 ...

  6. asp.net Forms身份验证

    Web.config中的配置 <system.web> <authentication mode="Forms"> <forms name=" ...

  7. forms身份验证 不跳转_Django用户身份验证实战

    在这篇Django文章中,我们 将讨论Django User 验证,Django附带了一个用户认证系统.它处理用户帐户,组,权限和基于cookie的用户会话.Django身份验证系统同时处理身份验证和 ...

  8. IE11下用forms身份验证的问题

    <authentication mode="Forms"><forms name="weboa" loginUrl="login.a ...

  9. forms 身份验证(授权)详解

    首先在 web.config 中设置 <authentication mode="Forms">设置 mode="Forms"   <form ...

最新文章

  1. 在Ubuntu 16.04.1 LTS上安装XnView Multi Platform图片浏览器0.83
  2. 详解vue 路由跳转四种方式 (带参数)
  3. YBTOJ:彩色圆环
  4. linux 空硬盘,linux – dd在整个磁盘上,但不想要空的部分
  5. 用户登入身份验证,手机app登入身份验证,TokenAuth身份验证,JSON Web Token(JWT)身份验证
  6. MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
  7. SQL Server生成含有数据的脚本文件
  8. 01-【分析】神策系统的拆解与分析
  9. 【网络工程师】<软考中级>IP子网划分
  10. mac 右键 启动终端
  11. kali kda安装 linux_KDA-无损音乐下载
  12. Xcode8控制台不打印NSLog
  13. 新手学习 python 的好工具:PyScripter
  14. 电脑通过wifi连接手机(adb移动设备连接电脑)
  15. 如何保证电脑硬盘格式化后数据不能被恢复?
  16. [LeetCode javaScript] 881. 救生艇
  17. 台式计算机连不上网,台式机插上网线连不上网怎么办?
  18. ctf从零开始学 0x1:Windows下的二进制安全学习路线
  19. Red Team常用命令速查
  20. AVL树(平衡二叉搜索树)详解及C++代码实现

热门文章

  1. 天弘余额宝4月10日起全面解除限购,你还会选择天弘余额宝吗?
  2. 30万大银行的大额存单,三年给4.25,还有更高的吗?
  3. Liveness 探测 - 每天5分钟玩转 Docker 容器技术(143)
  4. 为什么你总办不到大额信用卡?
  5. 程序员们请别做下一个小贝
  6. aws mysql价格_mysql – AWS RDS“转出”成本有多贵?
  7. linux php和java环境变量配置_Linux下Java环境变量的安装与配置
  8. 汇编语言 把最大值放入max 把最小值放入min_Excel求最大值地球人都知道,那要求出第2、第3、第N大值呢?...
  9. 计算机科学与技术博士论文,计算机科学与技术系博士学位论文答辩.PDF
  10. postgresql是如何求年龄的_Postgresql 通过出生日期获取年龄的操作