【问题标题】:FormsAuthenticationTicket expirationFormsAuthenticationTicket 过期
【发布时间】:2012-06-02 03:22:05
【问题描述】:

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

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 的 currenlty 设置为 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 属性,而不是在创建对象之后。

如果有人有很好的解释,我会全力以赴! :)

【问题讨论】:

    标签: c# asp.net cookies forms-authentication


    【解决方案1】:

    您的代码的问题是您正在调用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 当然会从配置中获取默认超时时间。

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

    【讨论】:

    • 嗯..是的..正如我所说..当我第一次得到它时很简单..:)谢谢:)
    【解决方案2】:

    我认为您不了解 cookie 过期日期和票证过期日期之间的区别 - 即使票证存储在其中的 cookie 仍然有效,票证也可以被视为过期。 FormsAuthenticationTicket 构造函数的第 4 个参数负责票证的到期日期。

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

    【讨论】:

    • 我以为我是用“cookie.Expires = ticket.Expiration;”做到的?那就是将 cookie 的过期时间设置为与门票相同.... 两者都应该是 120 分钟。
    猜你喜欢
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2014-03-08
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    相关资源
    最近更新 更多