我很难过。我有一个MVC3应用程序使用FormsAuthentication与自定义令牌(存储一些额外的用户数据)。它适用于IE。但是,在Firefox和Chrome中,cookie不会被遵守。
Fiddler中的检查显示,在登录时,cookie在响应中被发送到客户端,但是在客户端的后续请求中(在登录后加载主页面),cookie不会被发送回服务器。
我的代码:
var encryptedCookieString = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedCookieString);
cookie.Expires = ticket.Expiration;
HttpContext.Current.Response.Cookies.Add(cookie);
获取cookie:
var cookie = HttpContext.Current.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
Auth设置的web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
我查看了Firefox和Chrome浏览器,无法查看关闭Cookie的任何地方。
起初我认为这可能是在localhost上开发的问题,因此我部署到了培训服务器。同样的故事 - 在IE中运行,在Chrome或Firefox中不起作用。
任何线索?
更新
我的一位同事能够通过Chrome访问它,它对他有用。所以我不得不相信这是我的Chrome / Firefox的错误。此外,我在VPN上并使用远程桌面进入我的开发机器。这会导致这个问题吗?
答案 0 :(得分:2)
答案是:cookie太大了。
花了一些时间才弄明白这一点。我们在cookie中存储了大量额外的用户数据(以防止对数据库重复查询),并且cookie超出了大多数浏览器允许的4Kb。
答案 1 :(得分:0)
是否可能在web.config中的身份验证的forms
节点中有cookieless="UseDeviceProfile"
或"AutoDetect"
?
如果是,请将其更改为cookieless="UseCookies"