民间,
当你点击servlet / jsp时,app服务器会自动启动会话。它会将会话cookie放在第一个动态响应中,并在整个过程中进行跟踪。
我有一个休息后端,我注意到没有会话cookie被交易。所以我手动添加代码来发送JSESSIONID cookie:
@Context
private HttpServletRequest httpRequest;
// ...
@GET
@Path( "/{rcpGuid}" )
public Response myMethod( ... )
{
final HttpSession session = httpRequest.getSession();
final String sSessionId = session.getId();
...
return Response.status( Response.Status.SEE_OTHER ).
location( redirectUrl ).cookie( new NewCookie( "JSESSIONID", sSessionId ) );
}
现在这导致返回2个JSESSIONID cookie副本,之前没有Set-Cookie标头。这就是我现在在浏览器的检查员中看到的内容:
Set-Cookie:JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Path=/nn, JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Version=1
只要这样可行,我就不在乎。但不幸的是,当我的浏览器请求将URL重定向到(注意响应是“SEE_OTHER”)时,该请求不具有会话ID。这导致我的应用程序无法正常运行。
任何见解?
答案 0 :(得分:5)
当你点击servlet / jsp时,app服务器会自动启动会话。它会将会话cookie放在第一个动态响应中,并在整个过程中进行跟踪。
在调用httpRequest.getSession()
之前,应用服务器不会创建会话。
我有一个休息后端,我注意到没有会话cookie被交易。所以我手动添加代码来发送JSESSIONID cookie:
在您的示例中,您致电getSession()
并创建单独的jsessionid
Cookie。这可以解释为什么你有两个饼干。如果你不这样做,你根本就没有jessionid
。
答案 1 :(得分:0)
如果它是REST后端,那么您不应该拥有JSESSIONID cookie并将后端端点保持为无状态。
从您的某个Web服务获取结果所需的所有信息都应包含在对Web服务的请求中。 Web服务是幂等的。