12

我的应用程序可以控制用户权限,因为并非所有用户都可以访问完整的网站。此时,特定用户的所有这些权限都存储在他的会话中,因为每次回发都在数据库中搜索对我来说是个问题。

问题是当我删除一个权限时,用户仍然可以访问该页面,并且只有当他关闭浏览器时,更新才会生效。

有没有办法通过 ID 杀死特定的应用程序会话,强制用户再次登录?

4

3 回答 3

15
"Is there a way to Kill an specific Application Session by the ID, forcing user to Log in again?"

不可以。您只能访问执行当前请求的用户(即您自己)的 Session 对象,而不能访问其他用户的 Session 对象。

因此,您需要将用户的 id 存储在其他地方,例如在静态集合中。当用户发出下一个请求时,您可以检查 id 是否在集合中,并更新权限或注销用户。

另一种选择是将所有当前登录用户的权限对象保存在静态集合以及他们的 Session 变量中。这样您就可以在不访问该用户的 Session 对象的情况下更改权限对象。

当然,在 Web 应用程序中使用静态变量需要采取通常的预防措施。由于多个线程可以访问它,因此必须同步访问。此外,正如 Alexei Levenkov 指出的那样,如果您有多个服务器,则必须保持服务器之间的数据同步。

于 2013-08-26T19:00:56.643 回答
1

你可以写Session.Abandon();Session.Clear();

或者Session.SessionID[int index];

将特定的用户会话值存储在其中,然后使用 Session.Abandon();Session.Clear();

要杀死特定会话,请尝试使用Session.Remove("key");

于 2013-08-26T18:50:12.863 回答
-2

要删除特定的Session,然后使用Session.Remove(),如下所示:

Session.Remove("YourKey");

注意:这会从 中删除值和键Session,而您可能会看到人们使用Session["YourKey"] = null;它只会删除值,但会保留键。这可能是也可能不是您想要的,但只是想指出区别。

于 2013-08-26T18:52:22.777 回答