ASPXAUTH cookie没有被保存

6
我正在使用ASP .NET MVC 2开发一个Web项目。
在这个项目中,我们将一些信息存储在加密的cookie(ASPXAUTH cookie)中,以避免每个请求都需要查询数据库。
问题在于,这部分代码突然停止工作了。
我检查了源代码控制服务器上对代码所做的更改,但没有发现任何问题。我甚至还恢复了已知正常工作的副本(在其他人的PC上也可以工作),但调试后发现.ASPXAUTH cookie不再被保存。反而是设置了ASP.NET_SessionId cookie...(之前没有)
我更改了web.config文件以关闭sessionState。这样就不再设置ASP.NET_SessionId cookie了,但它仍未能保存auth cookie。
最近我安装了一些Microsoft Windows XP更新,但另一个人(他的PC上应用程序运行得很好)也同样安装了这些更新。
通过谷歌搜索,我发现一些信息指出了cookie过期日期的问题。有些是因为电脑没有正确的时间/日期(不是这种情况),有些是因为cookie过期日期被错误地设置。(我已检查并正确设置)...
除了我正在使用的浏览器(Chrome)外,问题还存在于其他浏览器中(我尝试了IE6)。
你有任何想法吗?我会继续发布任何有用的信息。
提前感谢。
3个回答

10

这可能是由于您的Cookie过大导致的。我曾遇到同样的问题。如果您的Cookie变得太大,它就无法正常工作,当然这取决于浏览器。

MSDN

通常情况下,cookie的大小限制为4096字节,每个网站最多只能存储20个cookie。通过使用带有子键的单个cookie,可以使用更少的那20个cookie。此外,一个单独的cookie占用大约50个字符的开销(过期信息等),加上您在其中存储的值的长度,所有这些都计入了4096字节的限制。如果您存储五个子键而不是五个单独的cookie,则可以节省单独的cookie的开销并节省大约200字节。

什么是网络浏览器cookie键的最大大小?

当cookie文件超过最大大小时会发生什么?


你说得对,这绝对是一个尺寸问题。非常感谢。:] - kripto_ash

1
检查cookie大小的简单方法是调试并运行以下代码。
int cookieSize = System.Text.UTF8Encoding.UTF8.GetByteCount(faCookie.Values.ToString());

如果超过限制,您将遇到问题。

0
在我的情况下,在与墙壁的某些头痛对抗后,我注意到在我的工作项目中,cookie 是使用设置的。
FormsAuthentication.SetAuthCookie(user.token, false);

相比之下,在我的未工作的项目中,cookie 是手动设置的:

var coockie = FormsAuthentication.GetAuthCookie(user.token, false);
coockie.Expires = DateTime.Now.AddDays(7);

Response.Cookies.Add(coockie);

这发生在我的一个共享主机上,之后由于托管提供商进行了一些更改,我无法通过支持部门找出或找到原因。本地主机或其他共享主机或VPS使用第一种方法都可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接