gpt4 book ai didi

sql-server - 出于什么设计原因,Asp.Net Core SessionKey 与 SessionId 不同?

转载 作者:行者123 更新时间:2023-12-04 02:06:59 24 4
gpt4 key购买 nike

一些背景

在 asp.net core 中,当使用 SqlServer 存储 session 时,奇怪的是 SqlServer 表中的 Id 列被设置为 sessionKey 的值,这是一个 GuidSessionMiddleware 生成。我说的很奇怪,因为有一个 SessionId 但表中的 Id 没有设置为那个,它被设置为 SessionKey。 (这不是我编的)

用于表中IdsessionKey 也是加密后放置在 session cookie 中的值。这是 SessionMiddleware 代码:

 var guidBytes = new byte[16];
CryptoRandom.GetBytes(guidBytes);
sessionKey = new Guid(guidBytes).ToString();
cookieValue = CookieProtection.Protect(_dataProtector, sessionKey);
var establisher = new SessionEstablisher(context, cookieValue, _options);
tryEstablishSession = establisher.TryEstablishSession;
isNewSessionKey = true;

然而,SessionId 是由以下代码行中的 DistributedSession object 生成的 Guid:

_sessionId = new Guid(IdBytes).ToString();

有趣的是,ISession 接口(interface)为 SessionId 提供了一个属性,但没有为 SessionKey 提供属性。因此,在代码中访问 SessionId 然后访问 SessionKey 通常要容易得多,例如,当您可以访问 HttpContext 对象时。

这使得很难将 session 与数据库记录相匹配(如果您希望这样做的话)。 stackoverflow 上的另一位用户以及 How to Determine Session ID when using SQL Sever session storage 也指出了这一点。

为什么?

我想知道的是为什么系统会这样设计?为什么 SessionIdSessionKey 不一样?为什么要使用两个不同的 Guids?我问是因为我正在创建我自己的 ISession 实现并且我很想在我的实现中使用 SessionKey 作为 SessionId 这样将数据库中的记录与 session 匹配起来会更容易。那会是个坏主意吗?为什么 DistributedSession 对象不以这种方式设计,而是生成一个不同于 SessionKeySessionId?我能想到的唯一原因可能是试图通过混淆数据库记录和它所属的 session 之间的链接来提高安全性。但总的来说,安全专家并不认为通过混淆来保护安全是有效的。所以我想知道为什么要实现这样的设计?

最佳答案

我还在 GitHub 上发布了这个问题 https://github.com/aspnet/Session/issues/151#issuecomment-287894321也尝试得到答案。

@Tracher 在那里回答了问题,所以我将他的回答粘贴在下面,这样它也可以在 stackoveflow 上找到。

生命周期不同。 session (和 SessionId)的真实生命周期由服务器控制。 SessionKey 存储在 cookie 中,并在客户端存在不确定的时间。如果 session 在服务器上过期,然后客户端使用旧的 SessionKey 发送新请求,则会创建一个具有新 SessionId 的新 session 实例,但使用旧的 SessionKey 进行存储,这样我们就不必发出新的 cookie。

换句话说,不要依赖你无法控制的事情。客户端可以无限期地保留和重播他们的 SessionKey,但它是服务器决定是否真的仍然是同一个 session 。

关于sql-server - 出于什么设计原因,Asp.Net Core SessionKey 与 SessionId 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590026/

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