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

时间:2013-10-09 21:45:53

标签: java ajax session servlets tomcat7

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

现在我想在我的网站上添加用户逻辑,并为各个用户的请求维护servlet会话。

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

我也理解这个会话id可以返回给客户端的两种方式是使用cookie(JESSIONID)或URL重写。

如果我不能使用URL重写,因为我只是返回JSON数据,cookie是我离开的唯一途径,将会话ID发送回客户端吗?

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

1 个答案:

答案 0 :(得分:0)

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

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