Session ID 是在服务器端还是客户端生成?

Posted

技术标签:

【中文标题】Session ID 是在服务器端还是客户端生成?【英文标题】:Is a Session ID generated on the Server-side or Client-side? 【发布时间】:2010-09-19 00:45:30 【问题描述】:

此网页http://www.w3schools.com/ASP/prop_sessionid.asp 声明会话 ID 是在服务器端生成的。

如果是这种情况,那么服务器如何知道它在第二个请求响应周期中仍然是同一个客户端?

肯定会在 ClientSide 生成 SessionId,以便客户端确定将相同的值传递给服务器?

【问题讨论】:

经典 ASP 不支持无 cookie 模式,仅支持 ASP.NET。 【参考方案1】:

会话 ID 通常在服务器上生成。然后将其作为 HTTP 标头中的 cookie 或通过将其包含在 html 中发送到客户端,即链接变为 href=my.html?sessionid=1234。

然后,客户端的下一个请求将在 cookie 或请求的 GET 部分中包含会话 Id。

【讨论】:

谁反对这个?如果有人发现这个答案有任何问题,请告诉我...【参考方案2】:

ID 在服务器上生成。然后客户端将其存储在会话 cookie 中,服务器会在后续请求中获取该 cookie。

如果服务器在无 cookie 模式下运行,则会话密钥成为 URL 的一部分,服务器从那里解析它。

添加:...如果服务器希望使用会话 cookie,但客户端禁用了 cookie,那么从服务器的角度来看,所有请求都是新会话,因为它无法判断这是同一用户。

【讨论】:

【参考方案3】:

如果不存在,服务器将生成一个会话 ID。但是一旦生成,客户端就可以将该 id 传递回服务器。如果客户端修改了这个 id,你可能会从服务器收到一个错误,并生成一个新的 id。

【讨论】:

【参考方案4】:

SessionID 是在服务器端生成的,但在 Cookie 中存储在客户端上。然后,每次客户端向服务器发出请求时,SessionID 都会用于对客户端的现有会话进行身份验证。

【讨论】:

不一定是 cookie。我可以嵌入到查询字符串中。 链接是经典的 ASP 示例,它只使用会话 cookie。 ASP.NET 可以使用无 cookie 会话。 但它也存储在服务器中,对吧(用于验证目的)?

以上是关于Session ID 是在服务器端还是客户端生成?的主要内容,如果未能解决你的问题,请参考以下文章

客户端和服务端如何使用Token和Session

Token和session 详解

session + redis 统一认证 登陆系统

session&token based auth登录方式描述

Django视图——状态保持(SESSION)

spring security 基于session的认证授权