【问题标题】:Redis Session State Provider not deleting keys on Session AbandonRedis Session State Provider 没有删除 Session Abandon 上的键
【发布时间】:2015-02-23 12:15:39
【问题描述】:

我使用 procedure 将会话状态存储在 Azure Redis 缓存中。

NuGet RedisSessionStateProvider 将您的会话状态保存在 Redis 中,您可以像在 Proc Session 中一样管理它。

当用户登录时,我会做这样的事情:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
Session.Add("key", "value");

会话值在应用程序中始终可用。 如果您查看您的 REDIS 缓存,您将看到这两个键 snurztvlyl2jk5wnzstjikln_Internal snurztvlyl2jk5wnzstjikln_Data 其中snurztvlyl2jk5wnzstjikln 是 SessionID。

当我退出时:

public ActionResult LogOff()
{
Session.Abandon();
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}

用户 SignOut 但如果我查看 redis 缓存,值仍然存在。它们不会被删除,只会在会话超时后被删除。我也试过Session.Clear() 并且Redis缓存中的键仍然存在。

为什么没有删除密钥或者我做错了什么?

更新我创建了一个公共回购来重现这个问题 https://github.com/ricardopolo/RedisIssue

【问题讨论】:

    标签: asp.net-mvc session azure redis stackexchange.redis


    【解决方案1】:

    我联系了 NuGet RedisSessionStateProvider 的创建者,他们向我解释了它的预期行为。

    他们说:

    现在您执行注销,它调用“Session.Abandon()”。这个操作 实际上从 Redis 中删除了会话,然后是 RedirectToAction("Index", “Home”)导致调用“GetItemExclusive”(会话中的一个方法) 状态提供者),它试图找到会话但没有找到它 转调用“CreateUninitializedItem”创建空会话 SessionStateActions 设置为 InitializeItem(或 1)。所以此时如果 你在这个会话上做 HGETALL 你会看到关键的“SessionStateActions” 而不是“钥匙”。因为这是新创建的空会话,而不是 旧的。

    这就是 ASP.NET MVC 的设计方式。你应该看到相同的行为 所有其他供应商也是如此。查看 (http://msdn.microsoft.com/en-us/library/ms178587(v=vs.140).aspx) 为 有关会话状态方法及其含义的更多详细信息。

    【讨论】:

      【解决方案2】:

      我有点能够复制它。在 Session.Abandon() 之后,所有内容都从缓存中删除,但随后调用 ResetItemTimeout 并更新内部密钥 (*_Internal)。所以用户在 Redis 中看到了内部键。但在 Session.Abandon() 之后我看不到 *_Data 可用,其中包含实际会话数据。

      我已经解决了这个与 *_Internal 相关的错误并发布了一个新的 nuget 包。 (https://www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/1.3.0)

      如果您仍然发现此新版本存在问题,请告诉我们。

      【讨论】:

      • 谢谢,使用这个最新的 Nuget 版本,问题仍然存在。我更新了一个 github repo 重现该问题的问题。
      猜你喜欢
      • 1970-01-01
      • 2016-12-09
      • 2015-05-17
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2019-02-12
      • 2017-11-02
      • 2016-11-29
      相关资源
      最近更新 更多