在Firefox和Chrome中不遵守MVC3 FormsAuthentication cookie,适用于IE

时间:2013-01-03 00:01:26

标签: asp.net google-chrome firefox cookies formsauthentication

我很难过。我有一个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上并使用远程桌面进入我的开发机器。这会导致这个问题吗?

2 个答案:

答案 0 :(得分:2)

答案是:cookie太大了。

花了一些时间才弄明白这一点。我们在cookie中存储了大量额外的用户数据(以防止对数据库重复查询),并且cookie超出了大多数浏览器允许的4Kb。

答案 1 :(得分:0)

是否可能在web.config中的身份验证的forms节点中有cookieless="UseDeviceProfile""AutoDetect"

如果是,请将其更改为cookieless="UseCookies"