2

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

4

2 回答 2

2

答案是:cookie 太大了。

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

于 2013-01-10T14:46:49.597 回答
0

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

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

于 2013-01-03T01:28:44.097 回答