HTTP 会话跟踪

问题描述 投票:0回答:6

由于 HTTP 是无状态协议,当客户端向服务器发出多次请求时,服务器如何唯一标识特定客户端在一段时间内(例如 t1、t2、t3..)的请求

我浏览网页并遇到了会话 ID、URL 重写和 Cookie 等术语。但如果有人以更好的方式解释它,那就太好了。具体来说,HTTP 请求和响应的哪一部分将用于会话跟踪?

http session-state sessiontracking
6个回答
51
投票

正如您提到的,实现HTTP会话跟踪的常见方法包括URL重写和cookie。会话跟踪基本上要求在对服务器的多个请求中维护会话 ID。这意味着每次给定客户端向服务器发出请求时,都会传递相同的会话 ID。服务器可以使用这个ID来查找它维护的会话信息。

使用 cookie 时,服务器通过设置

Set-Cookie
HTTP 响应标头要求客户端存储 cookie。此 cookie 包含分配给该客户端的唯一会话 ID - 在此示例中为字符串“ABAD1D”:

    Set-Cookie: JSESSIONID=ABAD1D;path=/

然后,客户端在每个请求上使用

Cookie
HTTP 请求标头将 cookie 发送回服务器,从而在每个请求上向服务器通知当前分配给客户端的会话 ID。

    Cookie: JSESSIONID=ABAD1D

使用 URL 重写时,相同的会话 ID 会被发送到 URL 中的某处。同样,服务器从 URL 中提取会话 ID,以便可以查找特定客户端的会话:

    http://my.app.com/index.jsp;JSESSIONID=ABAD1D

但是,服务器还必须确保发送回客户端的网页中的任何 URL 也被重写以包含特定的客户端会话 ID。由于会话 ID 编码在 URL 中,因此这种会话跟踪方法对于浏览器来说是透明的。如果服务器发现无法在客户端上设置会话 cookie,通常会诉诸 URL 重写 - 这意味着客户端不支持/允许 cookie。

请注意,会话可能会过期。这意味着,如果服务器在一段时间内没有“看到”给定的会话 ID,它可能会删除会话数据以保留资源。


12
投票

具体是HTTP的哪一部分 请求和响应将用于 会话跟踪?

在HTTP响应中,服务器可以设置cookie。它通过 Set-Cookie 标头来实现此目的。例如:

Set-Cookie: session=12345; path=/

然后,客户端返回与 cookie 一起设置的属性相匹配的所有 cookie 的值,其中可以包括路径(如上所述)和域,并且尚未过期。

cookie 作为 HTTP 标头的一部分发送回服务器。例如:

Cookie: session=12345

原始属性信息不会随 cookie 一起发回。

唯一的 cookie 允许服务器将唯一的密钥与特定的浏览器实例相关联。然后,服务器可以使用该键作为哈希表或保存唯一的每用户状态信息的数据库表的索引。


2
投票

HTTP 会话 是推荐的方法。会话标识会话期间源自同一浏览器的请求。所有 servlet 可以共享同一个会话。 JSESSIONID由服务器生成,可以通过cookie、URL重写(如果cookie关闭)或内置SSL机制传递给客户端。应注意尽量减少会话中存储的对象的大小,并且会话中存储的对象应该是可序列化的。在 Java servlet 中,可以按如下方式获取会话:

HttpSession 会话 = request.getSession(); //返回当前会话或新会话

会话可以超时(在 web.xml 中配置)或手动失效。


1
投票

会话跟踪是服务器端的事情。

Web 服务器发出一些返回到浏览器的会话标识符。浏览器随每个请求一起提交此会话标识符。

这可能是使用 cookie 对用户透明地完成的。


1
投票

会话处理在大多数情况下是通过向客户端发送 cookie 来处理的。该 cookie 会在该特定客户端的每个请求时发送回服务器。

session id
会与服务器端的一些资源(文件、内存空间)相关联,因此服务器通过读取cookie中的
session id
可以找到该资源,然后知道它是哪个客户端。


0
投票

HTTP 会话允许 Web 服务器在客户端和我们的应用程序之间的多个请求/响应期间维护用户身份并存储用户特定数据

© www.soinside.com 2019 - 2024. All rights reserved.