2009-10-21 98 views
3

我有一个在IIS7上运行的ASP.NET MVC应用程序。我使用会话来跟踪登录的用户。有一个名为IsSignedIn的会话。 (“true”表示此用户当前登录)。强制登录的用户通过使其会话无效重新登录

我也有我的应用程序管理页面。

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

有没有一种方法可以从我的管理页面访问/修改每个登录用户设置的会话变量?

回答

6

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

解决您的问题的一种方法是将已登录用户的列表存储在Application对象中,然后更改该变量中的值。为此,您必须在每个页面的顶部检查此用户位于登录用户列表中。

由于çağdaş对此答案发表了评论,如果您将要注销的用户列表存储在您的应用程序变量中,性能可能会更好。然后在你的页面的顶部做这样的事情(假,这在实际工作的代码片段将无法正常工作)

if(Application["SuspendedUsers"].Contains(Session["UserID"]) { 
    Session["IsSignedIn"] = false; 
    Application["SuspendedUsers"].Remove(Session["UserID"]); 
} 
+0

或者存储一个暂停用户列表,该列表可能会比登录用户小。 – 2009-10-21 18:40:39

+0

问题在于它意味着*任何未明确排除的人都会被认证。我的表弟鲍勃可能不需要访问您的网站。 – 2009-10-21 18:43:52

+0

+1。应用程序对象应该正常工作。缓存对象也将工作,并允许更多的灵活性。 – 2009-10-21 18:47:31

0

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

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