除了禁用cookies之外,什么原因会导致ASP.NET FormsAuthentication Cookie问题?

6
人们报告在我们的ASP.NET网站之一登录时遇到了问题。当我检查IIS日志时,看起来他们登录后浏览器中的FormsAuthentication cookie没有被缓存。
我认为这不是简单地“用户设置了浏览器不接受cookie”,因为: a)如果总体上cookies对于他们的浏览器不起作用,他们根本无法完成整个流程 - 例如,ASP.NET会话cookie似乎正常工作。 b)这些通常不是那种甚至知道如何关闭cookie的用户。
所以我认为必须是其他原因。除了用户简单地设置其浏览器拒绝cookie之外,什么问题会导致ASP.NET FormsAuthentication cookie停止工作?
编辑:例如,回答另一个问题表明有时会丢弃FormsAuthentication Cookies,因为它们太大了 - 或许有人可以阐明一下?
编辑:我们其中一个站点的FormsAuthentication cookie大小为233字节 - 这有点大吗?可以使它更小吗?也许这会有所帮助。
编辑:我注意到代码使用FormsAuthentication.SetAuthCookie()Response.Redirect()而不是FormsAuthentication.RedirectFromLoginPage() - 这可能有关吗?
7个回答

4
我曾经遇到过类似的问题(不是关于formsauthentication cookie,而是关于sticky loadbalancer cookie),因为服务器没有正确配置时间/时区,所以有些情况下cookie的过期日期早于用户机器上的当前时间。
请参见:如何处理cookie和缓存的过期值? 希望这对您有所帮助。

这里有同样的问题,只是客户机器的时区设置不正确。你怎么解决这个问题?- cookie在第二天过期? - Dai Bok

2
用户是否可能通过2个不同的域名访问您的Web服务器?例如,如果我访问www.foo.com并获取身份验证cookie,然后重定向到www.bar.com,则发送到www.bar.com的请求肯定不会包含由www.foo.com设置的cookie。 如果您在htp://login.foo.com设置cookie,然后重定向到htp://content.foo.com,也会出现此问题。但是,我相信可以使用通配符配置cookie,以便它适用于*.foo.com。
注:为了避免在此答案中出现实际可点击的垃圾链接,特意拼错了“http”。

谢谢。这确实可能会导致FormsAuthentication问题,但它不是我的问题的原因。 - codeulike
老鼠 - 看来简单的答案不起作用了,是吗?如果您找到根本原因,请在此处发布答案 - 我很好奇。 - mikemanne

2
如果您的网站在 Web Farm 中运行,您可能需要在所有服务器上设置相同的 machine keys,否则如果用户切换服务器,则可能无法解密身份验证票证。 RedirectFromLoginPage()SetAuthCookie 后跟 Response.Redirect() 之间的区别在于,第一个方法也适用于禁用 cookie 的情况(实际上它使用查询字符串参数来跟踪经过身份验证的用户)。

2

Web服务器名称或DNS名称的一部分是否包含下划线?

例如:

www2_http.mydomain.com

我记得在某个开发阶段遇到过这个问题,会话无法正常运行。将机器域名中的下划线删除后,该问题得到解决。

敬礼


2

你是否在使用多个域名访问同一个Web应用程序?请记住,Cookie是特定于域的,例如:www.mydomain.com <> www.mydomain.net <> my.domain.net。

猜测一下,你的web.config文件中是否有机器密钥?


1

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


谢谢。这确实可能会导致FormsAuthentication问题,但它不是我的问题的原因。 - codeulike

0

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