gpt4 book ai didi

c# - 使用 DistributedSqlServerCache 的 ASP.CORE session

转载 作者:太空狗 更新时间:2023-10-30 01:28:43 24 4
gpt4 key购买 nike

我们使用 DistributedSqlServerCache 来存储用户 session 数据,但我注意到一些意外/奇怪的行为。所以我想知道 DistributedSqlServerCache 如何在幕后工作以帮助我理解我所看到的行为。

当用户到达站点时,会立即插入一个数据库条目,如下图 1 所示。

img 1

当用户注销或 session 超时时, session 数据被清除(替换为一些任意默认值)并且 ExpiresAtTime 也被重置,如下图 2 所示。

img 2

再次,另一个用户到达该站点,并插入一个新的数据库条目,如下图 3 所示。

img 3

但是这一次,如果应用程序池被回收或者IIS被重置,那么下面(img 4)是数据库中的结果:

img 4

看来原来的session还没有清空,又开启了一个新的session。

为了完整起见,这是我们在 StartUp.cs 中使用的代码:

services.AddDistributedSqlServerCache(o =>
{
o.ConnectionString = "conn_string...";
o.SchemaName = "dbo";
o.TableName = "PS_PWD_SESSIONS";
});

services.AddSession();

除非我的坚持有误,否则这对我来说没有意义。如果能深入了解此行为,我将不胜感激。

最佳答案

最好不要太担心这个。 ASP.NET Core 知道它在做什么。我认为您看到的行为是 session key 与 session ID 的结果。 session ID 与实际的物理 session 相关联,保存在此处的数据库中。但是,发送给用户的 cookie 仅包含一个 session key 。此 session key 始终有效且永不过期。然后,客户端始终使用相同的 session key 发回此 cookie,ASP.NET Core 在内部根据 session 是否已过期等决定是恢复之前的 session 还是创建新 session 。

换句话说,实际数据库中的基础数据不一定反射(reflect)现有的“ session ”,至少从客户端的角度来看是这样。对于客户来说,他们的 session 永远存在,但在数据库中它可以被删除。如果数据库中没有与客户端 session key 相对应的事件 session ,则 ASP.NET Core 只会创建一个新 session 。

关于c# - 使用 DistributedSqlServerCache 的 ASP.CORE session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com