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