ASP.NET按ID删除会话

时间:2013-08-26 18:46:56

标签: c# asp.net session sessionid

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

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

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

3 个答案:

答案 0 :(得分:14)

"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所指出的,如果你有多台服务器,你必须保持数据在服务器之间同步。

答案 1 :(得分:1)

您可以撰写Session.Abandon();Session.Clear();

Session.SessionID[int index];

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

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

答案 2 :(得分:-2)

要移除Session的特定内容,请使用Session.Remove(),如下所示:

Session.Remove("YourKey");

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