在IE浏览器中,FormsAuthentication无法正常工作,但在其他浏览器中可以正常工作。

7
这确实是一个奇怪的问题...
我有一个使用FormsAuthentication处理用户访问权限的ASP.net 4.0,C#网站,其中包括一个登录页面。当会话超时或需要重新登录时,该网站中的代码会将用户重定向回登录页面。这些都是非常基本的操作,我已经做过十几次了。
我知道整个流程都在工作,因为我已经能够通过VS2010登录到该网站,并在尝试的每个浏览器上运行。当它在Chrome、Firefox、Safari(Mac)和两个手机浏览器上运行时,它也完全正常。唯一出现问题的是Internet Explorer。
现在,这个问题有点难以调试,考虑到它在本地的IE上可以工作但在服务器上不能。它还在服务器上的其他浏览器中工作,这也排除了服务器配置问题。
为了尝试找出可能出错的地方,我在我的FormsAuthentication.RedirectToLogin("WhateverPage=WhateverSectionOfCode")行中添加了一个查询字符串。问题是,当我在IE中运行站点时,它从未附加该查询字符串,这导致我认为它从未命中任何那些"RedirectToLogin"行。
我知道它进行了身份验证,因为更新数据库中的最后登录时间戳的代码仅在用户经过身份验证时才会触发。看起来"RedirectFromLogin"行确实可以找到web.config中的正确条目...它可能确实在重定向我,但即使它这样做,它总是将我弹回到登录屏幕。
我已经检查了所有可能导致此问题的非常基本的ID-10T错误(呵呵),如增加的安全设置、禁用的Cookie等,但我在多台机器上得到了相同的结果。
我真的不知道下一步该检查什么。我已经让其他两组人看过代码,但他们无法找出为什么会发生这种情况的原因。如果有人有任何建议,我很乐意听取。
谢谢!

用户在被弹回登录页面后仍然保持认证状态吗? - James Johnson
@JamesJohnson - 听起来很奇怪,但似乎是这样。 - user967255
@CodingGorilla - 我试用了 Fiddler。唯一的大区别是我在 IE 中得到了 HTTP 302 状态。你有什么想法吗? - user967255
@user967255 你能解决这个问题吗?我也遇到了同样的问题,但是没有找到任何解决方案。 - GMD
显示剩余6条评论
3个回答

4
我认为这与cookie有关。你在web.config中设置了域属性吗?
<authentication mode="Forms">
  <forms loginUrl="~/login.aspx" name="cookiename" domain="domain.com" cookieless="UseCookies" slidingExpiration="true" timeout="60"/>
</authentication>

表单元素用于身份验证(ASP.NET设置模式)


不,我还没有,但我可以试一试。 - user967255
好吧,我试了一下...还是没成功。 - user967255

4

你不知道我花了多少时间与我们的开发团队一起解决这个问题。最初,我不愿意在子域中使用下划线来配置他们的网站,这让整个过程更加有趣。 - jscott

-1

我也遇到同样的问题,但除了 Chrome 之外的所有其他浏览器都有问题。 奇怪的是,当所有这些浏览器在本地尝试(在运行服务的同一台计算机上)时,一切正常。 但是,当我远程连接时 - 只有 Chrome 能工作。Firefox 和 IE 每次都将我重定向回登录页面,即使用户已经通过身份验证 - 就像您的情况一样,在数据库中登录时间戳已更新。 但是我还有另一个开发服务器,位于另一个网络中,连接到该网络需要更少的时间,在这里,三个浏览器也都可以正常工作。 因此,我认为问题可能在 IIS 设置中,这可能在真实服务器和开发服务器上不同,或者在创建会话的 Redirect 和线程中可能存在问题。我找到了一些关于此的有趣主题。虽然它是关于 ASP WebForms 的。请参阅stakoverflow 上我的问题。如果您解决了此问题,请告诉我!


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