Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Redis会话状态提供程序在会话放弃时不删除密钥_Asp.net Mvc_Session_Azure_Redis_Stackexchange.redis - Fatal编程技术网

Asp.net mvc Redis会话状态提供程序在会话放弃时不删除密钥

Asp.net mvc Redis会话状态提供程序在会话放弃时不删除密钥,asp.net-mvc,session,azure,redis,stackexchange.redis,Asp.net Mvc,Session,Azure,Redis,Stackexchange.redis,我正在使用此命令将会话状态存储在Azure Redis缓存中 NuGet将会话状态保存在Redis中,您可以将其作为CLASICAL inProc会话进行管理 当用户登录时,我会这样做: AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); Session.Add("key", "value"); 会话值在应用程序中始终可用。 如果您查看RE

我正在使用此命令将会话状态存储在Azure Redis缓存中

NuGet将会话状态保存在Redis中,您可以将其作为CLASICAL inProc会话进行管理

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

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
Session.Add("key", "value");
会话值在应用程序中始终可用。 如果您查看REDIS缓存,您将看到这两个键
snurztvlyl2jk5wnzstjikln_Internal
snurztvlyl2jk5wnzstjikln_Data
其中
snurztvlyl2jk5wnzstjikln
是会话ID

当我注销时:

public ActionResult LogOff()
{
Session.Abandon();
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
用户注销,但如果我查看redis缓存,值将保持不变。它们不会被删除,只有在会话超时后才会被删除。我还尝试了
Session.Clear()
,Redis缓存中的键仍然存在

为什么钥匙没有被删除,或者我做错了什么

更新我创建了一个公开回购,再现了该问题

我可以复制它。在Session.about()之后,所有内容都将从缓存中删除,但随后会调用ResetItemTimeout并更新内部密钥(*\u internal)。所以用户可以在Redis中看到内部密钥。但是我看不到Session.about()之后可用的*\数据,它包含实际的会话数据

我已经解决了这个与*_Internal相关的bug,并发布了一个新的nuget包。()


如果您仍然看到这个新版本的问题,请告诉我们

我联系了NuGet RedisessionStateProvider的创建者,他们向我解释了这是一种预期行为

他们说,

现在执行注销操作,该操作将调用“Session.about()”。这次手术 实际上从Redis中删除会话,但随后重定向到操作(“索引”, “Home”)导致调用“GetItemExclusive”(会话内的方法) 状态提供程序)尝试查找会话,但在中未找到会话 turn调用“CreateUninitializedItem”,该调用使用创建空会话 SessionStateActions设置为InitializeItem(或1)。所以在这一点上,如果 在本次会议上,您将看到关键的“SessionStateActions” 而不是“钥匙”。因为这是新创建的空会话,而不是 老的那个

这就是ASP.NET MVC的设计方式。你应该看到和你一样的行为 所有其他供应商也是如此。检查 ()用于 有关会话状态方法及其含义的更多详细信息


谢谢,使用这个最新的Nuget版本,问题依然存在。我将问题更新为github回购协议,复制了该问题。