考虑 servlet A 将用户绑定到这样的会话:
HttpSession session = req.getSession(true);
和同一个用户执行后不久 对 servlet B 的请求属于同一个应用程序 servelt A 。
此时当servlet B执行时:
HttpSession session = req.getSession(false);
是会话空吗?
答案 0 :(得分:3)
以下是此代码返回null的可能原因:
答案 1 :(得分:1)
true
在必要时为此请求创建新会话;如果没有当前会话,则false
返回null
您需要检查在第二个servlet的请求中是否收到会话ID。您可以使用getRequestedSessionId
只有当您的会话在两次通话之间或浏览器获得session id
之前已经无效时才会发生这种情况SeveletB
答案 2 :(得分:0)
它实际上取决于servlet的顺序:
通常,如果要避免自动创建会话 - 必须确保在创建会话的代码之前永远不会执行使用会话的代码。
如果会话为空,那么很好的做法是将用户从servlet B重定向到servlet A.
答案 3 :(得分:0)
如您所述,首先调用servletA
,然后调用servletB
。
如果您提到的其他情况没有发生,您将在servletB
中使用servletA
中使用/创建的同一会话(非空)。
在servletA中,
getSession(true) in servletA means create and return the session if not
present otherwise return the existing session
在servletB中,
getSession(false) in servletB means return the existing session if present
otherwise return null.
由于您已经在servletA
中创建了会话,因此您将在servletB
中收到 not null 会话,前提是两次调用之间没有任何反应消灭你的会话,例如会话到期。