双重登录ASP.Net WebForms应用程序的一些用户

时间:2009-08-20 14:36:13

标签: asp.net forms-authentication

我有一个使用表单身份验证的asp .net webforms应用程序。对于少数用户,我们在登录时遇到问题,他们导航到几页,然后要求他们再次登录。一旦登录第二次,他们似乎能够按预期保持登录状态。不应该要求他们第二次登录。

这是一台服务器,没有网络农场,没什么大不了的。

这只发生在一些用户身上,但似乎确实是来自同一建筑物的所有用户。我无法复制这一点,如果我们的一位培训师没有看到它发生在几个客户身上,我们甚至可能会开始否认这种情况发生了。

还有其他人见过这样的事吗?

我也看到很多“会员资格证书验证失败”。事件日志中的错误。这可能是相关的,但我所做的所有谷歌搜索似乎都指向网络农场等,而不是单个服务器。

更新

  1. 没有代理服务器,IIS服务器和浏览器(IE8)都在同一台机器上。
  2. 安装的AV软件是Symantec Endpoint,在一台机器上,另一台用户根本没有任何AV(AV Fail!)。
  3. 浏览器是IE 8,没有多余的装饰,没有一个没有默认安装的插件。
  4. 会话和用户登录超时都设置为30分钟,问题发生在用户登录的1分钟内。
  5. 记录显示用户只有一个IP地址。
  6. 我在其所有变体中尝试了sessionMode,这似乎没有任何区别。

8 个答案:

答案 0 :(得分:5)

某些东西必须导致ASP.NET认为这些用户有新会话或他们的身份验证cookie正在失效。这里有一些我可以考虑检查的事情:

  1. 用户是否通过代理服务器访问该站点?我们的一个客户有一个代理,有时会关闭所有打开的连接,导致ASP.NET将会话视为新的。
  2. 一个过于激进的反病毒,反间谍软件产品是否会“吃掉”会话认证cookie?
  3. 他们是否有cookie管理器浏览器加载项导致身份验证cookie消失或更改?
  4. 听起来很基本,但我看到这种情况发生的原因是网站超时设置得太短。如果用户在页面上停留时间超过超时,则会强制他们再次登录。当页面显示需要一段时间才能完成的大量数据时,这可能是特定于页面的。
  5. 我刚才想到的另一件事是,您是否允许ASP.NET进程(也称为Web园林)的多个工作进程?如果是这样,与Web场相同的约束将适用于身份验证。

答案 1 :(得分:2)

从问题用户的PC中打开Fiddler并查看标题中传递的内容。我的赌注是代理服务器和网络问题。

答案 2 :(得分:1)

用户是否可能来自动态IP地址?我已经看到了用户会话搞砸的问题,因为他们访问网站的IP地址因某种原因发生了变化。

答案 3 :(得分:1)

使用不同浏览器(不同浏览器,不同版本,不同扩展名)的浏览器是否会发生这种情况?这可能是一个线索。

一般来说,当问题有些可重复或至少可预测时,我会使用 Http Fiddler 。将它安装在客户端计算机上,打开它,然后开始浏览(这可以通过系统代理工作 - 所以它适用于firefox,IE和任何其他支持代理的浏览器)。 Fiddler将记录客户端和服务器之间的所有http流量,然后您可以稍后仔细阅读此类会话以查找任何奇怪的内容。

这是一个很长的镜头,但我偶尔发现的一件事可能导致这些类型的不可预测的错误是脚本化并行化问题:有时按钮+链接有onclick处理程序导致回发。如果你有几个这样的处理程序可以触发同一个事件 - 特别是当默认事件仍然发生在你​​的自定义onclick或whatnot上时 - 你可能会在它看起来只是一个回发时引发几个回发。这可能导致各种不可预测的怪异,因为不完全清楚哪个请求最终“获胜” - 并且一些奇怪的错误可能导致会话终止。由于此行为对浏览器+网络延迟敏感,因此在发生时似乎非常难以预测。

答案 4 :(得分:1)

删除正在播放的客户端PC上的cookie

答案 5 :(得分:0)

如果ASP.NET表单身份验证没有访问特定页面的凭据,则可以将用户重定向到登录页面。这样做是为了让可能拥有多个登录名的用户有机会使用可能具有相应访问权限的其他帐户登录。我知道的基本问题,但用户第二次登录时是否使用相同的凭据?

答案 6 :(得分:0)

您可能没有专门指定的asp.net来使用基于cookie的会话,但允许使用cookie或无cookie会话

在后一种情况下,会话ID嵌入在Url中。您可能会解释您遇到的问题类型。基本上取决于您如何定义链接,其中一些无法获得会话ID ,因此用户在使用这些链接时会获得新会话 - 或可能在重定向期间。这可以解释为什么在您网站的特定部分,用户会放松会话。

如果您启用了混合模式,请尝试将其设置为仅限cookie,然后浏览您的网站。


更新:根据发布的额外信息,肯定需要更多信息。一些额外的事情要检查:

  • 您使用的是子域吗?如果是这种情况,可能没有将cookie配置为允许该域,并且在所有环境中都不会失败。
  • 如果您正在使用进程内会话,请确保应用程序中没有错误导致其重新启动进程
  • 也许导致它再次请求登录的原因是授权检查,并且您在某些角色相关代码上存在问题
  • 用户是否可能只是打开一个单独的窗口? ;)

答案 7 :(得分:0)

为了排除浏览器或浏览器插件搞乱的可能性,您是否检查过他们的用户代理字符串?如果它们是随机分布的,它可能不会导致问题,但如果它们完全相同,这也可能是一个暗示。