0

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

于 2012-09-12T20:05:07.223 回答