ASP.net forms 验证中,身份验证票,身份验证cookie,session他们的有效期如何使用呢?

voidmine 2007-08-31 09:07:45
.net 2.0中,当采用cookie的forms身份验证时,会产生两个cookie ,第一个是用于身份验证的cookie,里面存储身份验证票,第二个是用来存储会话标记符的cookie。
这个两个cookie的name可以分别在<forms> 和<sessionState>中设置。
我想问的是
1. 身份验证cookie中的 身份验证票同样也有 有效期,那么身份验证cookie的有效期和 身份验证票的有效期 有什么不一样呢?
2. 当我登录后,采用如下方法能明确的看到身份验证票的有效期,但cookie的有效期却始终是 0001-1-1 0:00:00 ,这是 什么意思呢 ??
code: FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
TextBox1.Text =ticket.Expiration.ToString();
TextBox1.Text +=“*"+Request.Cookies[FormsAuthentication .FormsCookieName].Expires.ToString();

3. 身份验证票的过期时间可以是滑动的,而<sessionState>中session timeout时间是固定的,如果session的timeout时间到了,那么用户在请求时,系统应该转到login页面,而实际我测试中并没有转到登录页,并且会话ID也没有变,为什么呢?

4. 当我session中没有存储信息时 ,每当我刷新一次,SessionID就变一次,而当我session存储了信息时,再刷新,sessionID却不再变化了,这又是为什么呢???

也许有些问题很简单,但却困扰了我很久,希望大家能给我一点帮助,谢谢!
...全文
871 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LutzMark 2008-01-31
  • 打赏
  • 举报
回复
看MSDN的专门文章,这里几句话很难说清楚
newnazi 2008-01-31
  • 打赏
  • 举报
回复
mark
aiq 2007-09-01
  • 打赏
  • 举报
回复
mark
flyingfz 2007-09-01
  • 打赏
  • 举报
回复
mark
Jinglecat 2007-08-31
  • 打赏
  • 举报
回复
对了,
asp.net 2.0 你通过 Relecator 反射 System.Web.SessionState.SessionIDManager.CreateSessionID 方法获取其内部默认实现算法
Jinglecat 2007-08-31
  • 打赏
  • 举报
回复
4. 当我session中没有存储信息时 ,每当我刷新一次,SessionID就变一次,而当我session存储了信息时,再刷新,sessionID却不再变化了,这又是为什么呢???

===========

恭喜 LZ ,你发现新第八大陆了 :)

不过,这是一个已知的问题!

默认设置中 SessionID 由 ASP.NET 内部【自动随机生成】
(asp.net 2.0 可以通过扩展 System.Web.SessionState.SessionIDManager 类来实现自己的 SessionID 生成器)


以下从 forums.asp.net 某个帖子获知,忘了 url 了 ...

默认实现中,
1.
假如某次请求 SessionID 是重新生成(通过Session.NewSession 属性判断),即此前 Session 已经过期或者是第一个访问,

2.
并且此次请求,你没有对 Session 做任何的操作(读或者写),那么完成此前请求之后, ASP.NET 会销毁此次 Session,

3.
下一次请求又是开始新的会话了,相当于此前 Session 的过期了(其实是asp.net主动销毁了)

4.
此策略的设计是合理的,难道不是吗?

既然是新Session,又没有操作Session,自然没有必要为你保留此Session

可以节省资源

5.
由于上面的策略设计,SessionID 并不保证是唯一的,被销毁Session 的 SessionID 仍然可能被使用到

具体实现算法,未知,


Hope helpful.
voidmine 2007-08-31
  • 打赏
  • 举报
回复
1. forms 验证中,我设置了 cookie.Expires=DateTime.Now.AddMinutes(1),身份验证票为10min,登录後查看Request.Cookies[FormsAuthentication .FormsCookieName].Expires还为0001-1-1 0:00:00,这又是为什么呢??

2. 如果不设置cookie.Expires,那么身份验证cookie的有效期 就等于 身份验证票的有效期,对吗?
gui0605 2007-08-31
  • 打赏
  • 举报
回复
孟老大出手,我等旁边学习
孟子E章 2007-08-31
  • 打赏
  • 举报
回复
会话基础知识这里讲的很详细
http://msdn2.microsoft.com/zh-cn/library/ms178194(VS.80).aspx
http://msdn2.microsoft.com/zh-cn/library/87069683(VS.80).aspx


如果不设置Cookie 的Expires属性,则默认返回0 ,也就是0001-1-1 0:00:00

Session是靠传递到客户端的 sessionID这个cookie值进行维护的,因此,只要sessionID有效,则Session也有效(但服务器端可能因为服务器重启等失效)
懒牛科技 2007-08-31
  • 打赏
  • 举报
回复
帮顶

62,261

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧