java - 没有 cookie 的 Servlet session + 仅返回 JSON 的 ajax 请求

标签 java ajax session servlets tomcat7

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

现在我想向我的网站添加用户逻辑,并为各个用户发出的请求维护 servlet session 。

据我所知,servlet需要返回第一次调用request.getSession()生成的session id,以便客户端可以将这个sessionid添加到以后的Ajax请求中,以便servlet知道内存中的哪个session使用。

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

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

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

最佳答案

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

如果 Servlet 调用 request.getSession(),则 Tomcat 始终在响应中包含 session ID。但是,从 Tomcat 7 开始,这些 cookie 默认情况下被标记为 httpOnly,这意味着它们对 javascript 不可见(以防止尝试窃取 cookie 的 XSS 攻击)。如果 session cookie 需要对脚本可见,那么您需要在 Web 应用程序的 context.xml (仅更改该文件的默认值)或 $CATALINA_BASE/conf/context.xml 中设置 useHttpOnly="false"来更改每个网络应用程序的默认设置。

关于java - 没有 cookie 的 Servlet session + 仅返回 JSON 的 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283375/

相关文章:

Java 主目录

java - 模型的 Primefaces TabView - 关闭时删除与选项卡关联的模型

mysql - MySQL中如何控制 session 并发?

javascript - Laravel Sessions 与 jQuery 可以在 PC 浏览器上工作,但不能在 Android 上工作?

asp.net - Session.Abandon() 和 Session.Clear() 有什么区别

java - System.currentTimeMillis()、new Date().getTime() 和 Calendar.getInstance().getTimeInMillis() 的准确性?

java - Firebase 没有 setter/getter

Java for 循环评估

javascript - 使用 jquery 重新绑定(bind)事件不起作用

javascript - 使用 $.when().then() 函数时遇到问题