有没有什么方法可以在不锁定 ASP.Net MVC 站点的情况下使用会话?

Is there any way to work with sessions without locking on ASP.Net MVC site?

有什么方法可以在 ASP.Net MVC 站点上使用会话 而无需锁定 吗?

会话锁机制导致很多问题;

当您的站点速度变慢一点点时,用户开始敲击键盘"F5"。当他们这样做时,请求开始相互等待。所有这些请求在 IIS 上都处于 hanging 会话模块的“RequestAcquireState”状态。

如果用户同时发出请求,就会发生这种情况。因为 IIS 中的会话模块和默认会话提供程序(或者通常是自定义的)具有两种锁定机制。

参见:

存在锁定,因为如果您不仔细设计您的流程,您的工作流程可能会被操纵。与性能问题相比,被黑客入侵对您来说是个大问题...

但是如果你为共享的、半一致的状态存储设计你的流程,(或者可能根本不需要使用)我们可以删除锁定吗完全脱离我们的情况?

是的,我们可以使用“UnlockedStateProvider”移除锁。

它是为 MVC 设计的,并没有实现 .Net SessionStateStoreProviderBase,因为 IIS 会话模块也有锁定机制。

这是一个简单的 ActionFilterAttribute,通过 HttpContext 为您提供状态存储。

它还有 Redis 提供程序,因此您可以在网络场、Azure 或 AWS 中安全使用。

请看:

Note: Developed for advanced usage and not a replacement for any SessionStateProvider...