ASP.NET按用户名终止会话

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

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

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

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

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

Session.SessionID[int index];

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

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

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

 Session.Remove("YourKey"); 

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