【发布时间】:2011-09-02 08:35:30
【问题描述】:
考虑 senario,我在 servlet 中使用带有 httpSession 对象的 servlet,我正在向会话对象中添加一些数据,并将响应发送给客户端,客户端发送对下一个 servlet 页面的请求,该页面需要存储在会话对象中的信息。现在,Web 服务器如何能够通知客户端给出的请求与在先前请求中创建的特定会话对象相关联?假设 cookie 是否被禁用?
【问题讨论】:
考虑 senario,我在 servlet 中使用带有 httpSession 对象的 servlet,我正在向会话对象中添加一些数据,并将响应发送给客户端,客户端发送对下一个 servlet 页面的请求,该页面需要存储在会话对象中的信息。现在,Web 服务器如何能够通知客户端给出的请求与在先前请求中创建的特定会话对象相关联?假设 cookie 是否被禁用?
【问题讨论】:
现在,Web 服务器如何能够通知客户端给出的请求与在先前请求中创建的特定会话对象相关联?
通常它使用 cookie。 cookie 存储了服务器与会话对象相关联的唯一标识符。
查看您的浏览器 cookie jar,您可能会发现为您的网站存储的 jsessionid cookie。
还有其他技术可以使用 URL 重写或隐藏表单字段来实现会话。不过,使用 cookie 是最常见和默认的技术。
【讨论】:
如果 cookie 被禁用,会话跟踪会发生 url rewriting 。服务器中的每个 url 都应使用会话 id 进行编码( HttpResponse.encodeURL() 为您执行此操作)。
另一种方法是为会话 ID 设置一个隐藏字段。但是,这仅适用于 POST 请求。
【讨论】:
Cookie 是迄今为止在 Java Web 服务器中实现 http 会话的最流行的技术。除了 cookie 之外,还可以使用另外两种技术 - url 重写(即在服务器生成的每个 URL 上附加一些额外的信息,这有助于识别会话)和嵌入在表单中的隐藏字段,其值包含识别会话所需的信息.
【讨论】: