Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Asp.net MVC核心可防止对某些页面进行多设备访问_Asp.net Core_Asp.net Identity_Signalr.client_Asp.net Core Signalr - Fatal编程技术网

Asp.net core Asp.net MVC核心可防止对某些页面进行多设备访问

Asp.net core Asp.net MVC核心可防止对某些页面进行多设备访问,asp.net-core,asp.net-identity,signalr.client,asp.net-core-signalr,Asp.net Core,Asp.net Identity,Signalr.client,Asp.net Core Signalr,我的整个系统允许一个用户同时从多个设备访问。但是,某些页面不允许这样做。当用户从设备1访问页面时,随后他从设备2访问页面,第二个设备需要正常访问。但是,应将第一个设备重定向到另一个页面(用户仍在两个设备上登录) 我正在使用ASP.net核心标识管理标识 读完后,我想我可以在这种情况下使用信号器。每当用户从设备2访问时,他都会向服务器发送消息。服务器将向设备1推送消息,设备1将重定向。但是,它看起来不太好,因为重定向是从客户端(设备1)进行的。这意味着设备1可以很容易地通过篡改客户端代码来拒绝重定

我的整个系统允许一个用户同时从多个设备访问。但是,某些页面不允许这样做。当用户从设备1访问页面时,随后他从设备2访问页面,第二个设备需要正常访问。但是,应将第一个设备重定向到另一个页面(用户仍在两个设备上登录)

我正在使用ASP.net核心标识管理标识

读完后,我想我可以在这种情况下使用信号器。每当用户从设备2访问时,他都会向服务器发送消息。服务器将向设备1推送消息,设备1将重定向。但是,它看起来不太好,因为重定向是从客户端(设备1)进行的。这意味着设备1可以很容易地通过篡改客户端代码来拒绝重定向

解决我的问题的正确方法是什么

当用户从设备1访问页面时,随后他从设备2访问页面,第二个设备需要正常访问。但是,应将第一个设备重定向到另一个页面(用户仍在两个设备上登录)

如您所述,为了实现上述要求,将信号器功能集成到web应用程序中是一个可能的解决方案

您可以保留有关
用户名-UserConnectionId(s)-PageName
的信息,然后可以调用hub方法来检查连接Id(和当前页面名称)是否与现有的connectionId(和页面名称)不同在保留的映射数据中,根据连接Id将消息推送到特定的客户端,以触发客户端重定向

它看起来不太好,因为重定向是从客户端(设备1)进行的

是的,客户端用户可以禁用signalR javascript客户端功能以防止重定向。作为一种解决方法,可以在服务器端进行双重检查

例如,您可以将上述映射数据
UserName-UserConnectionId(s)-PageName
存储在某个永久存储器中,然后您可以在控制器操作(或处理程序方法)代码逻辑中检查它,如果当前用户手动禁用javascript客户端功能,并且该存储器中未添加当前用户的映射数据,您可以将用户重定向到一个特定页面,该页面显示诸如“此应用程序需要signalR javascript客户端功能,请不要禁用它”之类的内容,而不是显示用户期望的页面

当用户从设备1访问页面时,随后他从设备2访问页面,第二个设备需要正常访问。但是,应将第一个设备重定向到另一个页面(用户仍在两个设备上登录)

如您所述,为了实现上述要求,将信号器功能集成到web应用程序中是一个可能的解决方案

您可以保留有关
用户名-UserConnectionId(s)-PageName
的信息,然后可以调用hub方法来检查连接Id(和当前页面名称)是否与现有的connectionId(和页面名称)不同在保留的映射数据中,根据连接Id将消息推送到特定的客户端,以触发客户端重定向

它看起来不太好,因为重定向是从客户端(设备1)进行的

是的,客户端用户可以禁用signalR javascript客户端功能以防止重定向。作为一种解决方法,可以在服务器端进行双重检查


例如,您可以将上述映射数据
UserName-UserConnectionId(s)-PageName
存储在某个永久存储器中,然后您可以在控制器操作(或处理程序方法)代码逻辑中检查它,如果当前用户手动禁用javascript客户端功能,并且该存储器中未添加当前用户的映射数据,您可以将用户重定向到一个特定页面,该页面显示“此应用程序需要signalR javascript客户端功能,请不要禁用它”等内容,而不是显示用户期望的页面。

关于服务器端的双重检查,我想我这里没有处理程序方法。在设备2访问时,设备1不执行任何调用服务器的操作。即使在设备2连接之前,也应调用设备1的控制器操作,并且该操作在该时间有效。设备1上的客户端可以先加载页面,然后禁用signarjavascript。在设备2访问时,设备1不执行任何调用服务器的操作。即使在设备2连接之前,也应调用设备1的控制器操作,并且该操作在该时间有效。设备1上的客户端可以先加载页面,然后禁用signalR javascript。