6

人们报告在登录我们的 ASP.NET 站点之一时遇到问题。当我检查 IIS 日志时,他们的浏览器在登录后似乎没有缓存 FormsAuthentication cookie。

我不认为它像“用户已将浏览器设置为不接受 cookie”那么简单,因为:
a) 如果 cookie 通常不适用于他们的浏览器,他们永远不会在这个过程中达到他们所拥有的程度- 例如,ASP.NET 会话 cookie 似乎工作正常。
b) 这些用户通常不会知道如何关闭 cookie。

所以我认为它必须是别的东西。除了用户简单地将浏览器设置为拒绝 cookie之外,还有哪些问题会导致 ASP.NET FormsAuthentication cookie 停止工作?

编辑:例如这个对另一个问题的回答表明,有时 FormsAuthentication Cookie 会因为太大而被丢弃 - 也许有人可以对此有所了解?

编辑:我们其中一个站点的 FormsAuthentication cookie 是 233 字节 - 是不是有点大?可以做得更小吗?也许这会有所帮助。

编辑:我注意到代码使用FormsAuthentication.SetAuthCookie()Response.Redirect()不是FormsAuthentication.RedirectFromLoginPage()- 这可能是相关的吗?

4

7 回答 7

4

我遇到了类似的问题(不是表单身份验证 cookie,而是粘性负载均衡器 cookie),因为服务器没有正确的时间/时区配置,所以在某些情况下 cookie 过期日期早于当前时间在用户机器上。

请参阅此处:过期值如何用于 cookie 和缓存?

希望能帮助到你

于 2010-10-20T17:26:29.150 回答
2

如果您的站点在网络场中运行,您可能需要在所有服务器上设置相同的机器密钥,或者如果用户切换服务器,它可能无法解密身份验证票证。

RedirectFromLoginPage()SetAuthCookie之后的区别在于Response.Redirect(),第一个在禁用 cookie 的情况下也有效(实际上它使用查询字符串参数来跟踪经过身份验证的用户)。

于 2010-10-19T17:49:53.173 回答
2

您是否使用多个域与同一个 Web 应用程序通信?请记住,cookie 是特定于域的,www.mydomain.com <> www.mydomain.net <> my.domain.net。

在黑暗中刺伤,您的 web.configs 中有机器密钥吗?

于 2010-10-21T02:03:42.097 回答
2

可能是网络服务器名称或 DNS 名称的一部分包含下划线吗?

例如:

www2_http.mydomain.com

我记得在某个开发阶段遇到过这个问题,在这个阶段,Sessions 不会有规律地表现。从机器域名中删除下划线为我解决了这个问题。

问候

于 2010-10-20T09:16:59.600 回答
2

用户是否有可能通过 2 个不同的域访问您的网络服务器?例如,如果我去 www.foo.com 并得到一个身份验证 cookie,然后重定向到 www.bar.com,发送到 www.bar.com 的请求肯定不会包含 www.foo.com 设置的 cookie .

如果您将 cookie 设置为 htp://login.foo.com,然后重定向到 htp://content.foo.com,也会发生此问题。但是,我相信可以使用通配符配置 cookie,以便它适用于 *.foo.com。

编辑:故意拼错“http”,因此这个答案中没有实际的可点击垃圾链接。:)

于 2010-08-16T18:05:56.747 回答
1

有一个空闲超时——他们是否登录,然后有一段时间没有做任何事情,然后再次尝试访问该站点?你可以检查一下。并且,查看超时设置为滑动超时(例如,上次请求后 20 分钟)还是固定超时(例如,登录后 20 分钟)。我认为滑动超时不是默认设置。

于 2010-08-16T19:16:19.060 回答
0

尝试以下步骤。

http://blogs.msdn.com/b/rahulso/archive/2007/01/17/troubleshooting-cookies-a-case-study.aspx

我很早就写了这篇文章,但是如果您密切关注它,您很有可能会找到根本原因。

隔离根本原因是这里的关键。一旦你首先弄清楚它为什么会发生,解决这个问题就会非常简单。

拉胡尔

www.dotnetscraps.com

于 2010-10-20T05:21:27.927 回答