我最近在研究无 cookie 会话,我看到一篇文章说,每当在服务器上创建会话时,它的 ID 都存储在客户端计算机上的 cookie 中,我在大学里被认为会话存储在服务器,如果 sessionID 在 cookie 中,并且 cookie 存储在本地的客户端计算机中,如何说会话存储在服务器上,对,会话存储在服务器上?如果是,那么无cookie会话的概念是什么,谁能解释一下
3 回答
会话状态(几乎总是)存储在服务器上,它由一个随机数标识,即会话令牌。
该令牌需要由客户端存储,并与他的 HTTP 请求一起发送到服务器(以便服务器可以记住他以前见过他并将会话与请求相关联)。
怎么能说会话存储在服务器上,对吗,会话存储在服务器上?
只有会话令牌存储在客户端上,并且由于它是一个随机数,它本身不包含任何有用的信息。它只有与存储在服务器上的数据一起变得有价值。
如果是,那么无cookie会话的概念是什么
存储令牌的最简单方法是使用 cookie。这就是饼干的发明目的。替代方案是使用隐藏的表单变量或作为 URL 的一部分来回传递 cookie。
会话存储在服务器上。每个会话都与 ID 相关联(ASP.NET 中最简单的会话状态提供程序只是内存中的一个字典,其中 ID 作为键)。此 ID 也存储在客户端的 cookie 中,但在无 cookie 会话的情况下,ID 存储在 URL(示例)中。
将会话 ID 视为表中的键,将会话状态视为值。只有密钥被发送给客户端,而不是值。
在 ASP.NET 的情况下,会话状态本身是一个包含键/值对的字典。
如果您使用的是标准 SQL Server 会话提供程序,我上面提到的表称为ASPStateTempSessions
. SessionId
是 PK,序列化Dictionary
后存储在SessionItemShort
orSessionItemLong
列中。