2010-08-16 61 views
6

人们报告无法登录到我们的某个ASP.NET网站。当我检查IIS日志时,看起来FormsAuthentication cookie在他们登录后没有被浏览器缓存。除Cookie被关闭外,什么会导致ASP.NET FormsAuthentication Cookie问题?

我不认为它的那样简单“用户设置自己的浏览器不接受cookies”,因为:
a)如果在一般的饼干并没有为他们的浏览器,他们从来没有已经获得尽可能就像他们在这个过程中所做的那样 - 例如,ASP.NET会话cookie似乎工作正常。
b)这些通常不是那种甚至不知道如何关闭cookies的用户。

所以我认为这一定是别的。除了用户只需设置其浏览器拒绝Cookie,什么样的问题可能导致ASP.NET FormsAuthentication Cookie停止工作,

编辑:例如This answer to another question表明有时FormsAuthentication Cookie会因为它们太大而被丢弃 - 也许有人可以对此有所了解?

编辑:我们网站之一的FormsAuthentication cookie为233字节 - 有点大吗?它可以做得更小?也许这会有所帮助。

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

回答

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

+0

谢谢。这确实可能会导致形式认证问题,但它不是我的问题的原因。 – codeulike 2010-08-18 15:30:28

+0

老鼠 - 很简单的答案,呃?如果你确实找到了根本原因,请把它作为答案在这里发布 - 现在我很好奇。 – mikemanne 2010-08-19 14:00:08

1

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

+0

谢谢。这确实可能会导致形式认证问题,但它不是我的问题的原因。 – codeulike 2010-08-18 15:30:59

2

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

RedirectFromLoginPage()SetAuthCookie其次Response.Redirect()之间的区别在于,第一部作品也如果禁用cookie(实际上它使用的查询字符串参数跟踪验证的用户)。

2

难道是Web服务器的名称,或DNS名称的一部分包含一个下划线?

如:

www2_http.mydomain.com

我记得在一定的发展阶段,其中,会议将不经常表现得有这个问题。从机器域名删除下划线解决了我的问题。

问候

4

我也曾有过类似的问题(不与formsauthentication饼干,但带有粘性的负载均衡器的cookie),因为服务器没有一个适当的时间/时区的配置,所以存在这样的情况,当cookie过期日期早于用户机器中的当前时间。

在这里看到:How do expire values work for cookies and caching?

希望它是否使用一个以上的域交谈相同的Web应用程序可以帮助

+0

这里的问题与此相同,只是客户机时区设置不正确。你如何解决这个问题? - cookie第二天到期? – 2013-04-10 11:11:57

2

?请记住,Cookie是域名特定的,www.mydomain.com <> www.mydomain.net <> my.domain.net。

在黑暗中刺你的机器钥匙在你的web.configs中吗?