Azure Redis - 当 mode=Custom 时如何在 ASP.NET 应用程序中模拟 session_end 事件?

问题描述

与我合作的组织使用 Azure Redis 为其 ASP.NET 站点存储会话信息,这对我来说是一个新领域(没有任何这方面的经验)。

我需要在会话结束时触发一些代码(超时、被放弃等),我读到如果您保存了会话状态,InProc Session_End 将触发,但我们的组织使用会话状态的自定义设置。像这样:

<sessionState mode="InProc" customProvider="RedisSessionStateStore" stateConnectionString="tcpip=xxxx" sqlConnectionString="xxxx" cookieless="false" timeout="1000">
      <providers> 
        <add name="RedisSessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="xxx" applicationName="xxxx" retryTimeoutInMilliseconds="1000" ssl="false" />
      </providers>
</sessionState>

据我所知,在这种情况下 Session_End 事件不会触发。除了做某种预定的工作试图找到所有被放弃的会话之外,还有什么方法可以捕获 Session_End 事件?

解决方法

注意:仅当 Web.config 文件中的 sessionstate 模式设置为 InProc 时才会引发 Session_End 事件。如果会话模式设置为 StateServer 或 SQLServer,则不会引发事件。

这就是无法捕获 Session_End 事件的原因。

我认为下面的博客,也许对你有用。

Building a Sitecore Redis Session State Provider

,

只要存储会话数据的 redis 密钥从您的 redis 缓存中过期(或被逐出),您的会话就会过期。因此,您可以使用 redis 密钥空间通知功能从您的 redis 缓存订阅密钥到期事件。

文档:http://redis.io/topics/notifications

您必须首先在 Azure 中的缓存中启用密钥空间通知,因为它们在默认情况下未启用。

文档: https://docs.microsoft.com/en-us/azure/azure-cache-for-redis/cache-configure#keyspace-notifications-advanced-settings

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...