ASP.NET按ID删除会话

Bru*_*yer 12 c# asp.net session sessionid

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

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

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

Guf*_*ffa 14

"Is there a way to Kill an specific Application Session by the ID, forcing user to Log in again?"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • +1"不是其他用户会话对象"...我会非常小心"静态集合"的权限 - 作为任何类型的缓存,它需要代码与实际存储/跨机器保持同步(如果超过为网站服务).如果权限检查的正确性很重要,则可能更容易吞下权限检查的性能. (2认同)