除了关闭cookie之外,什么可能导致ASP.NET FormsAuthentication Cookie问题?

时间:2010-08-16 09:57:27

标签: asp.net cookies formsauthentication

人们报告无法登录我们的某个ASP.NET网站。当我检查IIS日志时,看起来他们的浏览器登录后没有缓存FormsAuthentication cookie。

我认为它不像'用户将浏览器设置为不接受cookie'那样简单,因为:
a)如果一般的cookie不能用于他们的浏览器,那么他们在这个过程中就没有了 - 例如,ASP.NET会话cookie似乎工作正常。
b)这些用户通常不会知道如何关闭cookie。

所以我觉得它一定是别的东西。什么样的问题可能导致ASP.NET FormsAuthentication cookie停止工作,除了用户只是将他们的浏览器设置为拒绝cookie?

编辑:例如This answer to another question表示有时候FormsAuthentication Cookie会被删除,因为它们太大了 - 也许有人可以对此有所了解?

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

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

7 个答案:

答案 0 :(得分:4)

我遇到过类似的问题(不是使用formauthentication cookie,但是使用了一个粘性的loadbalancer cookie),因为服务器没有正确的时间/时区配置,因此有时候cookie的有效期是先于用户机器中的当前时间。

见这里:How do expire values work for cookies and caching?

希望有所帮助

答案 1 :(得分: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”,以便在此答案中没有实际可点击的垃圾链接。 :)

答案 2 :(得分:2)

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

RedirectFromLoginPage()SetAuthCookie后跟Response.Redirect()的区别在于,如果禁用了Cookie,第一个也会起作用(实际上它使用查询字符串参数来跟踪经过身份验证的用户)。 / p>

答案 3 :(得分:2)

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

例如:

www2_http.mydomain.com

我记得在一些开发阶段遇到这个问题,Sessions不会经常表现。从计算机域名中删除下划线为我解决了这个问题。

问候

答案 4 :(得分:2)

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

在黑暗中刺伤,你的web.configs中有机器键吗?

答案 5 :(得分:1)

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

答案 6 :(得分:0)

请尝试以下步骤。

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

我写了这么久,但是如果你仔细研究它,那么你找到根本原因的可能性很高。

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

的Rahul

www.dotnetscraps.com