【问题标题】:FormsAuthenticationTicket.expiration v web.config value timeoutFormsAuthenticationTicket.expiration v web.config 值超时
【发布时间】:2011-07-07 11:55:57
【问题描述】:

这是一个 MVC2 网站,我遇到了 FormsAuthentication 票证的问题。用户超时 30 分钟后无法重新登录。在测试期间,DateTime.Now.AddMinutes(30) 值设置为 5000,一切正常,但现在已更改为 30,这就是问题开始的时候

从 cookie 创建

 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1,
            user.UserID,
            DateTime.Now,
            DateTime.Now.AddMinutes(30),
            false,
            "user,user1",
            FormsAuthentication.FormsCookiePath);

Web.config 文件

<authentication mode="Forms">
  <forms loginUrl="~/Account.mvc/LogOn" timeout="2880" name=".ASPXFORMSAUTH" />
</authentication>

工单创建中的过期值是否需要>= web.config 值?

【问题讨论】:

    标签: c# asp.net-mvc-2 cookies formsauthentication formsauthenticationticket


    【解决方案1】:

    因为您是手动创建身份验证 cookie,所以您的 web.config 中的超时值将被完全忽略。所以我建议你使用相同的值:

    var ticket = new FormsAuthenticationTicket(
        1,
        user.UserID,
        DateTime.Now,
        DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
        false,
        "user,user1",
        FormsAuthentication.FormsCookiePath
    );
    var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
    {
        HttpOnly = true,
        Secure = FormsAuthentication.RequireSSL,
        Path = FormsAuthentication.FormsCookiePath,
        Domain = FormsAuthentication.CookieDomain
    };
    Response.AppendCookie(cookie);
    

    【讨论】:

    • 谢谢,我会将它们都设置为 30 分钟,是否有存储在其他任何地方的值可能导致用户能够登录一次,但在超时后不能再次登录?
    • 小修正 - 应该是Secure = FormsAuthentication.RequireSSLHttpOnly 设置只是使 cookie 对 Javascript 隐藏(在适当的浏览器中,IE6 不支持它)。
    • HTH :-) 请注意,您可能也应该拥有HttpOnly = true,因为它可以防止 XSS 攻击窃取 cookie。
    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2011-01-02
    • 2016-06-12
    相关资源
    最近更新 更多