Asp.net 角色与用户会话不同步

Asp.net 角色与用户会话不同步,asp.net,.net,asp.net-mvc,asp.net-mvc-3,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 3,如果您的用户数据处于会话状态HttpContext,并且有人在DB中更改了他们的角色,而现在您的会话(包含角色列表)与DB中的更改不同步,您如何处理这个问题?您不希望每次都点击数据库来检查角色 这是如何处理的?假设在同一个应用程序中进行了更改,您可以在静态属性(可能是字典)上设置排序信号量。然后,在begin请求事件中的httpmodule中,检查属性并基于属性值刷新会话数据 请确保在属性上使用锁/监视器,以防止多个线程同时访问它。假设已在同一应用程序中进行了更改,则可以在静态属性(可能是字典)

如果您的用户数据处于会话状态HttpContext,并且有人在DB中更改了他们的角色,而现在您的会话(包含角色列表)与DB中的更改不同步,您如何处理这个问题?您不希望每次都点击数据库来检查角色


这是如何处理的?

假设在同一个应用程序中进行了更改,您可以在静态属性(可能是字典)上设置排序信号量。然后,在begin请求事件中的httpmodule中,检查属性并基于属性值刷新会话数据


请确保在属性上使用锁/监视器,以防止多个线程同时访问它。

假设已在同一应用程序中进行了更改,则可以在静态属性(可能是字典)上设置排序信号量。然后,在begin请求事件中的httpmodule中,检查属性并基于属性值刷新会话数据


请确保在属性上使用锁/监视器,以防止多个线程同时访问它。

对用户会话变量的更改必须由用户启动。据我所知,如果用户当前已登录,并且管理员更改了其角色,则无法在用户不加载新页面或开始新请求的情况下更新其现有会话。对于角色/身份验证项目,出于安全原因,您可能希望在每次加载新页面时执行检查。通过这种方式,如果您阻止访问,效果会立即生效,并且在您关闭访问后,它们不会使会话保持活动状态


对一行数据执行基本选择的小检查不应该杀死您的服务器,除非您收到数十万个对动力不足的服务器的请求

对用户会话变量的更改必须由用户发起。据我所知,如果用户当前已登录,并且管理员更改了其角色,则无法在用户不加载新页面或开始新请求的情况下更新其现有会话。对于角色/身份验证项目,出于安全原因,您可能希望在每次加载新页面时执行检查。通过这种方式,如果您阻止访问,效果会立即生效,并且在您关闭访问后,它们不会使会话保持活动状态


对一行数据执行基本选择的小检查不应该杀死您的服务器,除非您收到数十万个对动力不足的服务器的请求。

使用SqlCacheDependency监视具有角色的表。当表更改时,缓存将失效。然后查询缓存中的角色,而不是数据库


使用SqlCacheDependency监视具有角色的表。当表更改时,缓存将失效。然后查询缓存中的角色,而不是数据库


我在我身上看到了相同的内容,实际上需要重新登录才能查看新角色…我在我身上看到了相同的内容,实际上需要重新登录才能查看新角色…但我不想在每次请求命中时都检查数据库…这会杀死我们的服务器。我可能想每x秒或每分钟做一次轮询?我不确定,所以这就是我要问的。你不必这么做。正如Darthg8r所建议的,只有在数据实际发生更改时才刷新数据。但我不想在每次请求命中时都检查数据库……这会杀死我们的服务器。我可能想每x秒或每分钟做一次轮询?我不确定,所以这就是我要问的。你不必这么做。正如Darthg8r所建议的,只有在数据发生实际更改时才刷新数据。理论上可以这样做,但我不知道是否有一个缓存依赖项提供程序使用memcache根据其他依赖项使更改的项无效,因此,sql缓存依赖性假设您谈论的是memcached,而不仅仅是任何“内存缓存”,即内置Http缓存,理论上您可以-但我不知道是否有一个带有memcache的缓存依赖性提供程序可以根据其他依赖性使更改的项无效,因此,sql缓存依赖性假设您谈论的是memcached,而不仅仅是任何“内存缓存”,即内置Http缓存