首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FormsAuthenticationTicket过期

FormsAuthenticationTicket过期
EN

Stack Overflow用户
提问于 2012-05-27 18:03:44
回答 2查看 19.8K关注 0票数 5

我一直在网上搜索,发现了许多奇怪的答案,我几乎都试过了。我的问题是。我的登录页面包含:

代码语言:javascript
复制
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);

FormsAuthentication.RedirectFromLoginPage(userName, persistCookie);

现在最小值是基于每个用户的,并且可以单独设置,persistCookie也是如此。

根据我的理解,这段代码应该可以覆盖web.config中的默认值。应该是30分钟。

代码语言:javascript
复制
<authentication mode="Forms">
  <forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>

min当前设置为120,而persistCookie设置为太真。当我登录时,我会在30分钟内超时。(不是会话,所以在某个地方设置了过期日期,因为如果没有设置,cookie应该是基于会话的,而且我没有120分钟,这是这里的一种交易)

我的问题是,为了简化它,我如何获得值'min‘作为cookie的过期日期?

这可能会被证明是一件太简单的事情,但我目前完全卡住了,所以任何帮助都会得到重视。

编辑:我将登录逻辑更改为:

代码语言:javascript
复制
FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(min), persistCookie, userid.ToString());
string encTicket = FormsAuthentication.Encrypt(fat);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket) { Expires = fat.Expiration });
Response.Redirect(FormsAuthentication.GetRedirectUrl(userName, false));

现在它起作用了。但我似乎不明白为什么这个能行得通,而前一个不行。创建票证是一样的,唯一的区别是我在创建HttpCookie时添加了HttpCookie的Expires属性,而不是在创建对象之后。

如果有人有好的解释,我洗耳恭听!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-27 19:08:47

代码的问题是您调用了RedirectFromLoginPage,它将创建表单身份验证cookie,覆盖您刚刚创建的cookie:

代码语言:javascript
复制
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); 
cookie.Expires = ticket.Expiration; 
Response.Cookies.Add(cookie); 

FormsAuthentication.RedirectFromLoginPage(userName, persistCookie); <-- creates a new cookie

当然,由RedirectFromLoginPage创建的cookie将具有来自配置的默认超时。

你的第二个版本就是你要走的路。

票数 6
EN

Stack Overflow用户

发布于 2012-05-27 18:10:19

我想你不明白cookie过期日期和票证过期日期之间的区别--票证可以被认为是过期的,即使它所存储的cookie仍然有效。FormsAuthenticationTicket构造函数的第四个参数负责票证的过期日期。

因此,要回答您的问题,您需要手动设置cookie的过期日期,或者使其足够长,以超过身份验证票证的过期日期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10773121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档