采用Asp.Net的Forms身份验证时,非持久Cookie的过期时间会自动扩展
问题描述
之前没有使用Forms身份验证时,如果在登陆过程中把HttpOnly的Cookie过期时间设为半个小时,总会收到很多用户的抱怨,说登陆一会就过期了。
所以总是会把Cookie过期时间设的长一些,比如两个小时甚至一天,这样就能保证在登陆时设置一次Cookie,用户可以操作很长时间也不过期。
虽然也可以在每次用户请求页面时检查Cookie的过期时间并自动扩展,但未免过于麻烦,不如一次设大点来的简单。
偶然发现
今天在使用Forms身份验证编写《AppBox-基于ExtAspNet的企业通用管理框架》时,想当然的在Web.config中这么设置:
<authentication mode="Forms"> <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="360" defaultUrl="~/main.aspx" protection="All" path="/"/></authentication> |
我把过期时间设为了6个小时,以期望在登陆后的 6 个小时内不会听到用户的抱怨。
由于希望把用户所属的角色也一并保存到User.Identity中,在查阅关于自定义的身份验证时无意发现这篇文章中的一段话:
若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期
太棒了!如果真是这样,所谓的timeout属性根本不太重要,系统会在每次请求页面时重新判断过期时间,如果快过期了就自动扩展。
亲自验证
真正的学习和领会就需要亲自动手了,下面几个步骤会带领我们验证上面的说法(下面截图中使用的是FireFox + FireBug + FireCookie)。
1. 配置Web.config
<authentication mode="Forms"> <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="2" defaultUrl="~/main.aspx" protection="All" path="/"/></authentication> |
我们把过期时间设为 2 分钟,以方便观察Cookie的过期时间。
2. 登陆代码
在登陆成功的代码中,通过下面语句代码完成Cookie的写入和页面的跳转:
FormsAuthentication.RedirectFromLoginPage(userName, true); |
3. 观察登陆后的Cookie信息

由于我们是在 2012-6-22 9:04:12 登陆的,所以这里的过期时间是 2012-6-22 9:06:12
4. 在登陆 1 分钟内刷新页面
一分钟内刷新页面,Cookie的过期时间没有变化,和上图一样。
5. 在登陆 1 分钟后刷新页面

在 9:05:13 刷新的页面,也就是刚刚过去 1 分钟,系统会自动扩展Cookie过期时间,在此基础上再增加 2 分钟,所以现在的过期时间是 9:07:13
6. 在登陆 2 分钟后刷新页面

两分钟后刷新,Cookie过期,页面会自动跳转到登陆页面。
总结
Asp.Net的Forms身份验证不仅为我们提供了一致和安全的验证手段, 而且这种自动扩展Cookie过期时间的机制更是锦上添花,让我们有更多的时间关注于业务逻辑的实现。
采用Asp.Net的Forms身份验证时,非持久Cookie的过期时间会自动扩展的更多相关文章
- 采用Asp.Net的Forms身份验证时,持久Cookie的过期时间会自动扩展
原文:http://www.cnblogs.com/sanshi/archive/2012/06/22/2558476.html 若是持久Cookie,Cookie的有效期Expiration属性有当 ...
- asp.net的forms身份验证 单用户身份验证
asp.net的forms身份验证 单用户身份验证 首先要配置Web.config文件 <system.web> <authentication mode="Forms& ...
- ASP.NET:Forms身份验证和基于Role的权限验证
从Membership到SimpleMembership再到ASP.NET Identity,ASP.NET每一次更换身份验证的组件,都让我更失望.Membership的唯一作用就是你可以参考它的实现 ...
- 关于ASP.NET的“Forms身份验证”
目录结构如图如示: 如果用户没有通过身份验证则跳转到登录页面让用户登录,在配置文件的<system.web></system.web>结点下添加如下代码: <!--身份验 ...
- IE11,用Forms身份验证保存不了Cookie
在web.config中添加如下信息,即可. <authentication mode="Forms"> <forms cookieless=" ...
- ASP.NET Forms 身份验证
ASP.NET Forms 身份验证 在开发过程中,我们需要做的事情包括: 1. 在 web.config 中设置 Forms 身份验证相关参数.2. 创建登录页. 登录页中的操作包括: 1. 验证用 ...
- asp.net Forms身份验证详解
在做网站的时候,都会用到用户登录的功能.对于一些敏感的资源,我们只希望被授权的用户才能够访问,这让然需要用户的身份验证.对于初学者,通常将用户登录信息存放在Session中,笔者在刚接触到asp.ne ...
- asp.net Forms身份验证
Web.config中的配置<system.web><authentication mode="Forms"> <forms name="K ...
- asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
原文:asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功.请重试. Login控件 现象1.asp.net使用自定义sql server身份验证数据库,在A机器新增用户A,可以登录成 ...
随机推荐
- NoSQL--非关系型的数据库是什么?
NoSQL,指的是非关系型的数据库.NoSQL,意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前 ...
- c#中const、static、readonly的区别
1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...
- TextView------文字底部或者中间加横线
promotionLinkText = (TextView) this .findViewById(R.id. text_promotion_link ); 中间加横线 promotionLinkTe ...
- ElasticSearch 查询语法
ElasticSearch是基于lucene的开源搜索引擎,它的查询语法关键字跟lucene一样,如下: 分页:from/size 字段:fields 排序:sort 查询:query 过滤:filt ...
- selenium + python 多浏览器测试
selenium + python 多浏览器测试 支持库包 在学习 Python + Selenium 正篇之前,先来看下对多浏览器模拟的支持.目前selenium包中已包含webdriver,hel ...
- selenium python (四)键盘事件
#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #在实际测试过程中,有时候我们需要使用tab键将焦点转移到下一个需要操作 ...
- 转来的 cuda makefile 写法学习
原文作者:FreeAquar 原文出处:http://www.cnblogs.com/FreeAquar/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- 华丽的bootstrap3碰到土鳖IE6
之前由于看好很容易上手的bootstrap,然后用这个框架写了个网站,对于不会美工和细致设计的攻城师来说,bootstrap是个界面设计的瑞士军刀,三下五除二就能搞定个不算太丑的页面. 吭哧吭哧工作了 ...
- 详解WPF Blend工具中的复合路径功能 ( 含路径标记语法 )
写此文章的目的是为了简单分析一下 Blend工具中提供的"复合路径"功能.有人在我的博文中留言问我复合路径的问题. 稍微琢磨一下,觉得应该是对的.因此贴出来和大家分享.有不对的说 ...
- cocos2d-js取不到cocostudio里面控件问题
var winSize = cc.director.getWinSize(); //add main node var mainNode = cc.Node.create(); ; mainNode. ...