ASPXAUTH cookie 未保存
Posted
技术标签:
【中文标题】ASPXAUTH cookie 未保存【英文标题】:ASPXAUTH cookie is not being saved 【发布时间】:2010-12-26 09:56:26 【问题描述】:我正在使用 ASP .NET MVC 2 开发一个 Web 项目。
在这个项目中,我们将一些信息存储在一个加密的 cookie(ASPXAUTH cookie)中,以避免每次请求都查询数据库。
问题是这部分的代码突然停止工作了。
我查看了对源代码控制服务器上的代码所做的更改,是否有任何可能导致它的原因,但我一无所获。我什至恢复到一个已知的工作副本(在其他人的 PC 上工作,相同的代码等),但在调试之后,似乎 .ASPXAUTH cookie 不再被保存。相反,正在设置 ASP.NET_SessionId cookie...(以前没有)
我更改了 web.config 文件以关闭 sessionState。这消除了设置 ASP.NET_SessionId cookie,但它仍然没有保存身份验证 cookie。
我最近安装了一些 Microsoft Windows XP 更新,但其他人(他的 PC 运行该应用程序很好)也安装了。
在谷歌搜索后,我发现一些信息指出了 cookie 的到期日期存在问题。 Ether cus pc 没有正确的时间/日期(情况并非如此)和其他 cus 的 cookie 到期日期设置错误。 (我检查并正确设置)...
除了我使用 IE6 尝试过的(Chrome)之外,其他浏览器仍然存在此问题。
关于为什么会发生这种情况的任何想法?
我会继续发布我能找到的任何有用的信息。
提前致谢。
【问题讨论】:
【参考方案1】:这可能是您的 cookie 变得太大了。我遇到了同样的问题。 如果你的 cookie 变得太大,它就不会起作用,当然取决于浏览器
MSDN
cookie 通常被限制为 4096 字节,每个站点不能存储超过 20 个 cookie。通过使用带有子键的单个 cookie,您使用的站点分配的这 20 个 cookie 中的更少。此外,单个 cookie 占用大约 50 个字符作为开销(过期信息等),加上您存储在其中的值的长度,所有这些都计入 4096 字节的限制。如果您存储五个子键而不是五个单独的 cookie,则可以节省单独 cookie 的开销,并且可以节省大约 200 个字节。
What is the maximum size of a web browser's cookie's key?
what happens when cookies file exceeds maximum size?
【讨论】:
您成功了,这绝对是尺寸问题。非常感谢。 :]【参考方案2】:检查 cookie 大小的一种简单方法是调试并运行以下代码
int cookieSize = System.Text.UTF8Encoding.UTF8.GetByteCount(faCookie.Values.ToString());
如果超出限制,那么您将遇到问题。
【讨论】:
【参考方案3】:在我的工作项目中,我注意到在一定量的头撞到墙上之后,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 与第一个 approuch 工作得很好
【讨论】:
以上是关于ASPXAUTH cookie 未保存的主要内容,如果未能解决你的问题,请参考以下文章
使用 protection=validation 解密 .ASPXAUTH Cookie
在保护 ASPXAUTH 和 ASP.NET_SessionId cookie 之后,这是正确的行为吗?
Simplemembership ASPXAUTH cookie 在两个单独的 Web 项目上进行验证