3

JSESSIONID在使用 servlet 规范开发应用程序时,我一直认为为给定客户端的每个新请求创建的 cookie 是理所当然的。但是经过一番思考,servlet 容器仅在会话被请求并在代码中创建之后才创建 cookie 标头不是更合乎逻辑吗?对于禁用 cookie 的客户,它最终不会HttpSession为每个请求创建一个新的吗?

如果问题仍然不清楚,请告诉我,以便我进行编辑。TIA。

4

1 回答 1

1

默认情况下,Servlet 容器不会创建新的 Session,除非 Servlet 实际显式地创建它。仅仅因为在 Header 中填充了 JSEESIONID 并不意味着必须在服务器上有一个 seesion。一个例外是在 JSP 中,如果没有会话,则默认创建一个会话,除非 <%@ page session="false" %>

至于没有打开cookies:

Web 容器可以使用多种方法将会话与用户相关联,所有这些方法都涉及在客户端和服务器之间传递标识符。该标识符可以作为 cookie 保存在客户端上,或者 Web 组件可以在返回给客户端的每个 URL 中包含该标识符。

如果您的应用程序使用会话对象,您必须确保在客户端关闭 cookie 时让应用程序重写 URL 来启用会话跟踪。为此,您可以对 servlet 返回的所有 URL 调用响应的 encodeURL(URL) 方法。仅当禁用 cookie 时,此方法才会在 URL 中包含会话 ID;否则,它会返回未更改的 URL。

于 2010-07-17T17:04:26.597 回答