.NET Forms身份验证
.NET表单身份验证
1.配置文件中设置为Forms验证
<forms loginUrl="NetFromwork/FormLogin.aspx" defaultUrl="NetFromwork/FormLogin.aspx" name=".ASPNETFORMSTEST" protection="All" timeout="20" ></forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
2.验证用户合法后,将身份验证票证写入Cookie集合
//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()的原型:
//
// 摘要:
// 使用 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);
//
// 摘要:
// 将经过身份验证的用户重定向回最初请求的 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实例的票据信息,所以第二部分代码中,不该调用该函数,而应该用下面的代码代替:
//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属性没有显示设置的时候才生效。
转载于:https://www.cnblogs.com/besuccess/articles/3487535.html
.NET Forms身份验证相关推荐
- .net Forms身份验证不能用在应用的分布式部署中吗?
参照网上的一些方法,使用Forms身份验证对应用进行分布式部署,发现没有成功. 应用部署的两台内网服务器:192.168.1.19,192.168.1.87,使用Nginx做负载分配,配置完全相同:每 ...
- 为不同目录设置Forms身份验证
在进行Forms身份验证时,如果采用如下的方法配置web.config的话,则会出现所有的页面都要进行验证,这是用户所不能容忍的,具体代码如下: 1<authentication mode=&q ...
- [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证
在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数. 2. 创建登录页. 登录页中的操作包括: 1. 验证用户名和密码是否正确. 2. 创建身份 ...
- Forms身份验证基本原理
要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: <authentication mode="forms"> <fo ...
- 实现基于 ASP.NET Forms 身份验证的跨子域单点登录
对于跨应用程序的 ASP.NET Forms 身份验证,相信大家应该都不陌生,几年前很多文章都介绍了如何实现,比如 MSDN 的 跨应用程序进行 Forms 身份验证,唐朝程序员 的 ASP.NET站 ...
- asp.net Forms身份验证
Web.config中的配置 <system.web> <authentication mode="Forms"> <forms name=" ...
- forms身份验证 不跳转_Django用户身份验证实战
在这篇Django文章中,我们 将讨论Django User 验证,Django附带了一个用户认证系统.它处理用户帐户,组,权限和基于cookie的用户会话.Django身份验证系统同时处理身份验证和 ...
- IE11下用forms身份验证的问题
<authentication mode="Forms"><forms name="weboa" loginUrl="login.a ...
- forms 身份验证(授权)详解
首先在 web.config 中设置 <authentication mode="Forms">设置 mode="Forms" <form ...
最新文章
- 在Ubuntu 16.04.1 LTS上安装XnView Multi Platform图片浏览器0.83
- 详解vue 路由跳转四种方式 (带参数)
- YBTOJ:彩色圆环
- linux 空硬盘,linux – dd在整个磁盘上,但不想要空的部分
- 用户登入身份验证,手机app登入身份验证,TokenAuth身份验证,JSON Web Token(JWT)身份验证
- MySQL分表实现上百万上千万记录分布存储的批量查询设计模式
- SQL Server生成含有数据的脚本文件
- 01-【分析】神策系统的拆解与分析
- 【网络工程师】<软考中级>IP子网划分
- mac 右键 启动终端
- kali kda安装 linux_KDA-无损音乐下载
- Xcode8控制台不打印NSLog
- 新手学习 python 的好工具:PyScripter
- 电脑通过wifi连接手机(adb移动设备连接电脑)
- 如何保证电脑硬盘格式化后数据不能被恢复?
- [LeetCode javaScript] 881. 救生艇
- 台式计算机连不上网,台式机插上网线连不上网怎么办?
- ctf从零开始学 0x1:Windows下的二进制安全学习路线
- Red Team常用命令速查
- AVL树(平衡二叉搜索树)详解及C++代码实现
热门文章
- 天弘余额宝4月10日起全面解除限购,你还会选择天弘余额宝吗?
- 30万大银行的大额存单,三年给4.25,还有更高的吗?
- Liveness 探测 - 每天5分钟玩转 Docker 容器技术(143)
- 为什么你总办不到大额信用卡?
- 程序员们请别做下一个小贝
- aws mysql价格_mysql – AWS RDS“转出”成本有多贵?
- linux php和java环境变量配置_Linux下Java环境变量的安装与配置
- 汇编语言 把最大值放入max 把最小值放入min_Excel求最大值地球人都知道,那要求出第2、第3、第N大值呢?...
- 计算机科学与技术博士论文,计算机科学与技术系博士学位论文答辩.PDF
- postgresql是如何求年龄的_Postgresql 通过出生日期获取年龄的操作