没有 cookie 的 Servlet 会话 + 只返回 JSON 的 ajax 请求



这是我的情况,我有一个网站,我只是使用Apache HTTPD加载,然后向仅返回JSON数据的servlet发出Ajax POST请求。然后,该 JSON 数据用于更新表等。

现在,我想向我的站点添加用户逻辑,并为单个用户发出的请求维护 servlet 会话。

我知道 servlet 需要返回第一次调用 request.getSession(( 生成的会话 ID,以便客户端可以将此会话 ID 添加到未来的 Ajax 请求中,以便 servlet 知道要使用内存中的哪个会话。

我还了解,将此会话 ID 返回给客户端的两种方式是使用 cookie (JESSIONID( 或 URL 重写。

如果我无法使用 URL 重写,因为我只是返回 JSON 数据,那么 cookie 是将会话 ID 发回客户端的唯一方法吗?

另外,作为一个附带问题,目前我注意到在我来自servlet的任何HTTP响应中都没有JSESSIONID cookie。有人向我建议这是Tomcat7中的新事物,我必须在全局背景下激活它们.xml。这是否意味着默认情况下即使您调用request.getSession((也没有会话处理?

您已经正确识别了 Tomcat 支持的三种会话 ID 处理方式中的两种。还有第三种方法可以跟踪会话,但前提是应用程序通过 SSL 运行。在这种情况下,您可以将 Tomcat 配置为使用 SSL 会话 ID。

如果 Servlet 调用 request.getSession((,则 Tomcat 总是在响应中包含会话 ID。但是,这些 cookie 在 Tomcat 7 及更高版本中默认标记为 httpOnly,这意味着它们对 javascript 不可见(以防止试图窃取 cookie 的 XSS 攻击(。如果会话 cookie 需要对脚本可见,则需要在 Web 应用程序的上下文中设置 useHttpOnly="false".xml(仅更改该文件的默认值(或在 $CATALINA_BASE/conf/context.xml 中更改每个 Web 应用程序的默认设置。

最新更新