Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# 当管理员更改asp.net权限时,如何终止登录用户的会话?_C#_Asp.net_Session_Login_User Roles - Fatal编程技术网

C# 当管理员更改asp.net权限时,如何终止登录用户的会话?

C# 当管理员更改asp.net权限时,如何终止登录用户的会话?,c#,asp.net,session,login,user-roles,C#,Asp.net,Session,Login,User Roles,我正在从事一个有3个角色的项目 管理员 超级用户 使用者 管理员能够控制每个用户。当我更改任何用户权限时,我希望查看用户是否已经登录,如果已经登录,则终止该用户会话并将其重定向到登录页面 但我不知道该怎么做。我想实现的是一种同步,只要管理员对用户进行任何更改,应用程序就会以这种方式工作 我已经实现了如下更改 var userForUpdation = (from o in entitiesForUpdation.Users

我正在从事一个有
3个角色的项目

  • 管理员
  • 超级用户
  • 使用者
管理员能够控制每个用户。当我更改任何用户权限时,我希望查看用户是否已经登录,如果已经登录,则终止该用户会话并将其重定向到登录页面

但我不知道该怎么做。我想实现的是一种同步,只要管理员对用户进行任何更改,应用程序就会以这种方式工作

我已经实现了如下更改

var userForUpdation = (from o in entitiesForUpdation.Users
                                   where o.UserID == user.UserID
                                   select o).FirstOrDefault();
userForUpdation.User_Status = false;
entitiesForUpdation.SaveChanges();

如图所示,用户_状态被设置为false。现在,特定用户无法访问其帐户。但对我来说,这种情况正在发生,
登录的用户可以访问应用程序,直到他/她注销并再次登录。我想立即终止该特定用户的会话,这样他/她就不能再使用该应用程序了。

我认为在将某个会话更改为管理员后,您无法远程终止该会话。我想到的一个解决方案是创建一个操作过滤器,检查每个请求是否用户角色、访问级别或状态已更改,如果更改为真,则终止会话。

我认为您不能在更改管理员身份后远程终止会话。我想到的一个解决方案是创建一个操作过滤器,检查每个请求是否用户角色、访问级别或状态已更改,如果更改为真,则终止会话。

我认为您不能在更改管理员身份后远程终止会话。我想到的一个解决方案是创建一个操作过滤器,检查每个请求是否用户角色、访问级别或状态已更改,如果更改为真,则终止会话。

我认为您不能在更改管理员身份后远程终止会话。我想到的一个解决方案是创建一个操作过滤器,它检查每个请求是否用户角色、访问级别或状态已更改,如果更改为真,则终止会话。

您不能立即从会话外部终止会话。但是,您可以在
应用程序中设置一个标志,该标志将在每次请求时进行检查,如果设置,将放弃当前会话

要为用户设置标志,请执行以下操作:

if (Application["SessionAbandonFlags"] == null) 
    Application["SessionAbandonFlags"] = new List<string> ();

((List<string>) Application["SessionAbandonFlags"]).Add(currentUser);

这段代码当然可以改进。我只是想告诉你方向

您不能
立即
从会话外部终止会话。但是,您可以在
应用程序中设置一个标志,该标志将在每次请求时进行检查,如果设置,将放弃当前会话

要为用户设置标志,请执行以下操作:

if (Application["SessionAbandonFlags"] == null) 
    Application["SessionAbandonFlags"] = new List<string> ();

((List<string>) Application["SessionAbandonFlags"]).Add(currentUser);

这段代码当然可以改进。我只是想告诉你方向

您不能
立即
从会话外部终止会话。但是,您可以在
应用程序中设置一个标志,该标志将在每次请求时进行检查,如果设置,将放弃当前会话

要为用户设置标志,请执行以下操作:

if (Application["SessionAbandonFlags"] == null) 
    Application["SessionAbandonFlags"] = new List<string> ();

((List<string>) Application["SessionAbandonFlags"]).Add(currentUser);

这段代码当然可以改进。我只是想告诉你方向

您不能
立即
从会话外部终止会话。但是,您可以在
应用程序中设置一个标志,该标志将在每次请求时进行检查,如果设置,将放弃当前会话

要为用户设置标志,请执行以下操作:

if (Application["SessionAbandonFlags"] == null) 
    Application["SessionAbandonFlags"] = new List<string> ();

((List<string>) Application["SessionAbandonFlags"]).Add(currentUser);
这段代码当然可以改进。我只是想告诉你方向

您可以通过将JSON存储在
UserData
属性中来实现

因此,如果您在数据库中的
User
表中存储了一个字段,则每当用户角色发生更改时,就会有一个
UpdatedTimeDate
字段,该字段将使用当前UTC时间进行更新。将此值存储在表单身份验证票证中

在事件期间,您可以检查此值是否与数据库中存储的值匹配,如果不匹配,则使登录会话过期。因此,对用户角色的任何更改都将导致用户注销

这样做的优点是将此信息存储在身份验证机制本身中,并且它也可以跨集群中的服务器工作,而在
应用程序
对象中存储数据则不行。

您可以通过在
用户数据
属性中存储JSON来实现

因此,如果您在数据库中的
User
表中存储了一个字段,则每当用户角色发生更改时,就会有一个
UpdatedTimeDate
字段,该字段将使用当前UTC时间进行更新。将此值存储在表单身份验证票证中

在事件期间,您可以检查此值是否与数据库中存储的值匹配,如果不匹配,则使登录会话过期。因此,对用户角色的任何更改都将导致用户注销

这样做的优点是将此信息存储在身份验证机制本身中,并且它也可以跨集群中的服务器工作,而在
应用程序
对象中存储数据则不行。

您可以通过在
用户数据
属性中存储JSON来实现

因此,如果您在数据库中的
User
表中存储了一个字段,则每当用户角色发生更改时,就会有一个
UpdatedTimeDate
字段,该字段将使用当前UTC时间进行更新。将此值存储在表单身份验证票证中

在事件期间,您可以检查此值是否与数据库中存储的值匹配,如果不匹配,则使登录会话过期。因此,对用户角色的任何更改都将导致用户注销

这样做的优点是将此信息存储在身份验证机制本身中,并且它也可以跨集群中的服务器工作,而在
应用程序
对象中存储数据则不行。

您可以通过在
用户数据
属性中存储JSON来实现

因此,如果您在数据库中的
User
表中存储了一个字段,那么您可能会有一个
UpdatedTimeDate
字段,该字段在