我一直在网上搜索,发现了许多奇怪的答案,我几乎尝试了所有答案。我的问题是这个。我的登录页面包含:
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分钟。
<authentication mode="Forms">
<forms loginUrl="~/Default/default.aspx" defaultUrl="~/User/UserMain.aspx"/>
</authentication>
min 设置为 120,persistCookie 设置得太真。当我登录时,我在 30 分钟时超时。(不是会话,所以在某个地方设置了到期日期,因为如果没有设置 cookie 应该是基于会话的,我也没有得到 120 分钟,这是一种交易)
我的问题是,为了简化它,我如何让值“min”成为 cookie 的到期日期?
这可能也是一件简单的事情,但我目前完全陷入困境,所以任何帮助都会得到帮助。
编辑:我将登录逻辑更改为:
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 属性,而不是在创建对象之后。
如果有人有一个很好的解释,我会全力以赴!:)