我有一个在IIS7上运行的ASP.NET MVC应用程序。我使用会话来跟踪登录的用户。有一个名为IsSignedIn的会话。 (“true”表示此用户当前登录)。强制登录的用户通过使其会话无效重新登录
我也有我的应用程序管理页面。
现在,说已登录的用户1必须立即暂停使用该服务。因此,我想使我的管理页面中为user1设置的会话变量无效(这将强制用户再次登录)。
有没有一种方法可以从我的管理页面访问/修改每个登录用户设置的会话变量?
我有一个在IIS7上运行的ASP.NET MVC应用程序。我使用会话来跟踪登录的用户。有一个名为IsSignedIn的会话。 (“true”表示此用户当前登录)。强制登录的用户通过使其会话无效重新登录
我也有我的应用程序管理页面。
现在,说已登录的用户1必须立即暂停使用该服务。因此,我想使我的管理页面中为user1设置的会话变量无效(这将强制用户再次登录)。
有没有一种方法可以从我的管理页面访问/修改每个登录用户设置的会话变量?
您不能从另一个会话更改会话变量。
解决您的问题的一种方法是将已登录用户的列表存储在Application对象中,然后更改该变量中的值。为此,您必须在每个页面的顶部检查此用户位于登录用户列表中。
由于çağdaş对此答案发表了评论,如果您将要注销的用户列表存储在您的应用程序变量中,性能可能会更好。然后在你的页面的顶部做这样的事情(假,这在实际工作的代码片段将无法正常工作)
if(Application["SuspendedUsers"].Contains(Session["UserID"]) {
Session["IsSignedIn"] = false;
Application["SuspendedUsers"].Remove(Session["UserID"]);
}
在哪里存储您的会话状态?如果它在SQL服务器中,则应该可以通过更新数据库中的相关行来使其无效。但是,标准会话状态服务器似乎不允许这样做。
或者,检查每个相关页面顶部的数据库以查看用户是否仍有权限/已通过身份验证。
或者存储一个暂停用户列表,该列表可能会比登录用户小。 – 2009-10-21 18:40:39
问题在于它意味着*任何未明确排除的人都会被认证。我的表弟鲍勃可能不需要访问您的网站。 – 2009-10-21 18:43:52
+1。应用程序对象应该正常工作。缓存对象也将工作,并允许更多的灵活性。 – 2009-10-21 18:47:31