CSharp - C# FormsAuthenticationTicket过期

  显示原文与译文双语对照的内容

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


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 。

在我理解这些代码之后,应该会导致possibillity重写 Web.Config 中的缺省值。 应该是 30分钟。


<authentication mode="Forms">


 <forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>


</authentication>



min是currenlty设置为 120,persistCookie设置为 true 。 当我登录时,在 30分钟内得到超时。 ( 非会话,因这里设置了到期日期,因为如果没有设置 cookie,也不会有 120分钟) 。

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

这可以能也是一件简单的事情,但我目前完全卡住了,所以任何帮助都是 appriciated 。

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


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时,我添加了的过期属性。

如果有人对我有很好的解释 ! : )

时间: 原作者:

代码的问题是你正在调用 RedirectFromLoginPage,它将创建窗体身份验证 cookie,覆盖刚创建的cookie:


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当然会从配置中获得默认超时。

你的第二个版本是。

原作者:
...