【问题标题】:ASP.net forms auth and timing outASP.net 形成身份验证和超时
【发布时间】:2012-09-12 19:36:40
【问题描述】:

我有一个简单的小问题,但是下面的内容很长,可以进一步解释这个问题。

我有一个使用表单身份验证的 MVC 4 应用程序。我使用浏览器会话 cookie 进行了设置,以便他们可以根据需要使用该网站,但是一旦他们关闭浏览器,它实际上就会将其注销。

现在我以空闲计时器的形式添加了额外的安全层,因此如果它们空闲了 5 分钟,则会向服务器发送一个 ajax 请求以删除表单身份验证令牌,返回一个会话过期部分视图,并将此会话过期视图显示为模式对话框。

此对话框有一个显示用户名的标签和一个密码输入字段,以便他们可以重新输入密码。

这意味着如果有人打开另一个会话,他们只会进入登录屏幕,因为没有人登录,如果他们只是刷新当前屏幕,也会发生同样的情况。但这也意味着,如果用户在超时屏幕上输入密码,对话框会向服务器发送一个 ajax 请求以再次登录,然后删除对话框。

这一切(大部分)都完美无缺,它们将与以前一样在同一个屏幕上,并且它们还将像以前一样填写所有内容,例如,如果他们正在填写一张大表格等.

问题是,如果他们在浏览器中打开了 2 个不同的标签,第一个超时,按预期显示超时屏幕及其名称和密码输入框,但第二个浏览器当它向 mvc 方法发出超时屏幕请求时,选项卡没有找到已登录的用户,因为没有人登录,因为该人在第一次超时请求时已注销。我怎样才能解决这个问题?有简单的解决方案吗?还是有更好的设计来解决我的问题?

【问题讨论】:

  • 那么,当秒屏发现没有会话时,它可以再次显示您的对话框,之后它可以定期检查会话是否返回,然后再次关闭对话框?
  • 但是说为了说话,用户有 2 个屏幕,1 个主屏幕打开,另一个屏幕他们忘记了......他们忘记了超时的屏幕,将它们注销,并显示时间-退出对话框,然后他们正在处理的主屏幕发出相同的超时请求,没有登录用户,并且该屏幕对他们尝试重新登录没有用
  • 我通常通过跟踪用户在服务器端的活动来解决这个问题,所以当来自客户端的“超时”调用进来时,我们检查用户最后一次操作是什么时候(存储在 fx 会话中),如果它小于五分钟他必须在另一个屏幕上做某事,我们告诉客户不要让他超时并“给我们回电话”,看看我们是否应该在那个时候让他超时
  • 什么是“外汇会话”?我认为无论如何,使用您的解决方案会发生相同的最终结果,您打开了 2 个选项卡,将它们都放置 10 分钟,其中一个会正确超时,另一个不会因为用户已注销。
  • miracledev 的场景是有道理的。在您注销用户之前,请检查“LastActivityDate/LastLoginDate”列。

标签: asp.net asp.net-mvc forms-authentication


【解决方案1】:

我在实时站点中看到了这个问题,这真的很烦人。它强制用户只打开一个选项卡以避免退出。

您是否可以通过在超时后不将用户从服务器上注销而仅删除会话 cookie 来解决此问题?这样,用户仍然会在空闲选项卡上看到超时屏幕,但仍然可以使用其他选项卡。这仍然会带来不便,但我认为如果你真的想要那个超时屏幕,它可能是这样做的方法。除非你想用 WebSockets 或类似的东西来做。

【讨论】:

  • 但是如果我要删除cookie,本质上就是将它们注销,如果第一个超时请求到达服务器,删除cookie,然后第二个选项卡会发出超时请求它不会发送cookie,并且会像新用户一样访问服务器?
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多