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

这是我的情况,我有一个网站,我只是使用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中的新function,我必须在全局context.xml中激活它们。 这是否意味着即使您调用request.getSession(),默认情况下也没有会话处理?

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

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