MVC3不接受cookie

时间:2012-03-21 13:12:12

标签: c# asp.net asp.net-mvc-3 session-cookies

我刚推出了我的第一个MVC3应用程序,除了cookie授权外,一切正常。当用户访问我的站点并登录时,我使用有关该用户的数据设置.ASPAUTH cookie。它运作良好,直到一段时间过去。然后我必须再次登录,即使cookie在浏览器中,我可以看到过期设置为一年后。它在我的localhost上工作正常。 在我看来,它不是将我的信息设置为cookie,而是以某种方式在会话中,但即使我在一小时内重新启动计算机,我仍然登录。但如果我不在1小时内访问网络,那么我退出了。

感谢您的帮助。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                1,
                requestedUser.Name,
                DateTime.Now,
                DateTime.Now.AddYears(1),
                true,
                string.Format("{0};{1};{2}", requestedUser.IDUser.ToString(), requestedUser.IsAdmin.ToString(), profilePicture));

            string encryptedTicket = FormsAuthentication.Encrypt(ticket);
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            cookie.Expires = keepLogged == "keepLogged" ? DateTime.Now.AddYears(1) : DateTime.Now.AddHours(1);

            this.Response.Cookies.Add(cookie);
            return RedirectToAction("Index", "Posts");

1 个答案:

答案 0 :(得分:6)

您需要在web.config中设置类似这样的机器密钥

 <machineKey validationKey="4B79DF965DC586D2B267BDECB4580D40EE6811EE171AC65D929BECD8865C09ED8681B92F2177FE9F72B8E822B26914C79C1FF590CCEE65469CBC6FACD7D9F203" decryptionKey="CF39BCCD33BC38D17A704DFEB85AD9C5F265669FCD6AB54C" validation="SHA1" />

您可以使用此http://aspnetresources.com/tools/machineKey工具执行此操作,但必须将其粘贴到web.config中。

每次应用程序池重新启动时,应用程序都会重新启动,如果未在web.config中设置,则会自动生成新的机器密钥。 FormsAuthentication cookie使用该计算机密钥进行哈希处理,每次更改时,cookie都将变为无效