如何解决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 中的缓存中启用密钥空间通知,因为它们在默认情况下未启用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。