禁用不同标签上的导航,多个浏览器实例

时间:2015-05-08 12:03:50

标签: asp.net asp.net-mvc asp.net-mvc-4 session session-variables

假设:

我正在开发一个ASP.NET MVC 4应用程序,我使用表单身份验证来验证我的用户。

当其中一个用户登录我的Web应用程序时,他可以在任何地方导航并执行我的Web应用程序允许他执行的所有操作。

考虑到我的网络应用程序与其他第三方系统交互,每个用户操作都可能涉及潜在的危险情况。

情况示例:用户在IE中打开两个标签,进入可以执行更新操作的同一页面(即时发送给第三方系统),并在两个不同的时刻执行编辑操作。
独立于第三方系统的行为,在类似情况下,我的Web应用程序不应允许用户执行此操作。

目标

我想要做的是一个UI控件,当他试图第二次导航同一页面时(在他离开第一页之前)重定向用户。

我已经考虑过跟踪每个用户对每个页面的访问权限 为此,我想在document.ready事件和window.onbeforeunload事件上对我的Controller(在MVC中)进行AJAX调用。 在每个事件中,我的Controller应该在数据库表中读取和写入用户的数据。

我注意到,一旦用户通过表单身份验证进行登录,他就会在不同的选项卡和浏览器实例上共享会话信息(只要至少有一个是打开的)。

当用户浏览不同的标签页或浏览器实例时,在信息方面是否存在任何差异?

是否有可能做我想做的事情,而不使用像SignalR这样的框架(我不是专家)?

1 个答案:

答案 0 :(得分:0)

我认为你这是错误的做法。您无需在客户端尝试执行此操作,而是需要在更新中执行某些操作以检测并防止重复操作。

你如何做到这一点,取决于你如何构建应用程序的内部结构。

例如,您可以跟踪用户执行的更新操作,并确保只能执行单个更新操作。

如果用户已经执行了更新,那么您的POST操作可以执行您通过Ajax提到的重定向。

虽然SignalR可以用来试图阻止双重更新,但用户绕过这种机制是微不足道的。