人们报告无法登录我们的某个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()
- 这可能是相关的吗?
答案 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