C# 通过使已登录用户的会话无效,强制其重新登录

C# 通过使已登录用户的会话无效,强制其重新登录,c#,asp.net-mvc,iis,session,C#,Asp.net Mvc,Iis,Session,我有一个ASP.NET MVC应用程序在IIS7上运行。我使用会话来跟踪登录的用户。有一个名为IsSignedIn的会话。(“true”表示该用户当前已登录) 我也有我的申请管理页面 现在,假设已经登录的user1必须立即暂停使用该服务。因此,我想在我的管理页面中使为user1设置的会话变量无效(这将强制用户再次登录) 是否有办法从“我的管理”页面访问/修改每个登录用户设置的会话变量?您不能从另一个会话更改会话变量 解决问题的一种方法是在应用程序对象中存储已登录用户的列表,然后更改该变量中的值。

我有一个ASP.NET MVC应用程序在IIS7上运行。我使用会话来跟踪登录的用户。有一个名为IsSignedIn的会话。(“true”表示该用户当前已登录)

我也有我的申请管理页面

现在,假设已经登录的user1必须立即暂停使用该服务。因此,我想在我的管理页面中使为user1设置的会话变量无效(这将强制用户再次登录)


是否有办法从“我的管理”页面访问/修改每个登录用户设置的会话变量?

您不能从另一个会话更改会话变量

解决问题的一种方法是在应用程序对象中存储已登录用户的列表,然后更改该变量中的值。要使其正常工作,您必须在每页顶部检查该用户是否在登录用户列表中

正如对此答案的评论,如果在应用程序变量中存储要注销的用户列表,性能可能会更好。然后在页面顶部执行类似的操作(伪代码,这段实际代码片段将不起作用)


会话状态存储在哪里?如果它在SQL server中,您应该能够通过更新数据库中的相关行使其无效。但是,标准会话状态服务器似乎不允许这样做


或者,在每个相关页面的顶部检查您的数据库,以查看用户是否仍然拥有权限/是否经过身份验证

或者存储一个挂起的用户列表,该列表可能比登录的用户小。问题是,这意味着任何未明确排除的用户都经过身份验证。我表弟鲍勃可能不需要访问你的网站。应用程序对象应该可以很好地实现这一点。缓存对象也可以工作,并允许更大的灵活性。@ztech我的代码是对检查会话变量的现有代码的补充,而不是替代。这样,Bob将无法访问,因为他的会话[“isLoggedIn”]为false。
if(Application["SuspendedUsers"].Contains(Session["UserID"]) {
  Session["IsSignedIn"] = false;
  Application["SuspendedUsers"].Remove(Session["UserID"]);
}