我有一个简单的小问题,但是以下内容很长,可以解释这个问题。
我有一个使用表单身份验证的MVC 4应用程序。我使用浏览器会话cookie进行设置,以便他们可以根据需要使用该网站,但只要他们关闭浏览器,它就会将其记录下来。
现在我已经以空闲计时器的形式添加了一层额外的安全性,因此如果它们闲置5分钟,则会向服务器发送ajax请求以删除表单身份验证令牌,返回session expired partial view,并将此会话过期视图显示为模式对话框。
此对话框有一个标签,显示用户名和密码输入字段,以便他们重新输入密码。
这意味着如果有人打开另一个会话,他们就会进入登录界面,因为没有人登录,如果只是刷新当前屏幕,也会发生同样的情况。但这也意味着如果用户在超时屏幕上输入密码,对话框会向服务器发送ajax请求以再次登录,然后只删除对话框。
这一切(大部分)完美无缺,它们将与以前一样在屏幕上,并且它们也会像之前那样填写所有内容,例如,如果它们正在填写大型表格等
问题是,如果他们在浏览器中打开了2个不同的标签,则第一次超时,显示超时屏幕及其名称和密码输入框,但是第二个浏览器当它向mvc方法发出超时屏幕请求时,没有找到登录用户的选项卡,因为没有人登录,因为该人员已通过第一个超时请求注销。我怎样才能解决这个问题?有简单的解决方案吗?或者有更好的设计我如何做到这一点?
答案 0 :(得分:0)
我在直播网站上看到过这个问题,这真的很烦人。它强制用户只打开一个选项卡以避免被注销。
一旦超时命中,您是否可以通过不在服务器上记录用户来解决此问题,但只删除会话cookie?这样,用户仍然可以在空闲选项卡上看到超时屏幕,但仍可以使用其他选项卡。它仍然是一个不便,但我想如果你真的想要超时屏幕,它可能是这样做的方式。除非您想使用WebSockets或类似的东西。