ASP.MVC记住我在会话超时后cookie无法正常工作

时间:2014-12-23 08:54:59

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

在登录表单上,我可以选择允许用户单击“记住我”复选框,该复选框会创建一个新的FormsAuthenticationTicket,然后将其添加到cookie中。

if (_model.RememberMe)
{

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                                      _model.Username,
                                      DateTime.Now,
                                      DateTime.Now.AddDays(30),
                                      true,
                                      _model.Username,
                                      FormsAuthentication.FormsCookiePath);

    // Encrypt the ticket.
    string encTicket = FormsAuthentication.Encrypt(ticket);

    // Create the cookie.
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

如上所述,有望在客户浏览器中使用30天。

测试一下,我故意将当前会话超时只剩下一分钟

<sessionState timeout="1"></sessionState>

所以过了一会儿,如果用户说“记得我”,我希望不要将网站重定向回登录页面。不过确实如此。这是执行它的代码。

        // [".ASPXAUTH"] is the cookie name that is created by the FormsAuthenticationTicket`
        if (User.Identity.Name == "" && Request.Cookies[".ASPXAUTH"] == null)
        {

            return RedirectToAction("LogOut", "Login");
        }


        // the current session hasn't timed out or the remember me cookie is enabled
        FormsIdentity id = (FormsIdentity)User.Identity;
        FormsAuthenticationTicket ticket = id.Ticket;

但cookie是NULL。

我期待这是对我的误解,所以如果有人能帮我一把。我会很感激。

由于

1 个答案:

答案 0 :(得分:0)

您正在寻找的是

string mySessionCookie = System.Web.HttpContext.Current.Request.Headers["Cookie"];
if (mySessionCookie.IndexOf(".ASPXAUTH", StringComparison.Ordinal) >= 0) {
    // do something
}

修改

这个怎么样,我没有测试过,但我记得在

之前做过类似的事情
HttpCookie cookie = (HttpCookie)(Request.Cookies[FormsAuthentication.FormsCookieName]);
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);