- クライアント デバイスはすべての Cookie を消去します (したがって、
JSESSIONID
クライアントには Cookie は存在しません)。 - クライアントは Spring コントローラーにリクエストを送信します。
- Spring Interceptor がリクエストをインターセプトします。
preHandle()
Spring インターセプターのメソッドの最初の行で、の値をログに記録し、ログにこの値が表示されます。これは、実際にはクライアントから が受信されたことをrequest.getRequestedSessionId()
意味するはずです。JSESSIONID
ただし、私の Fiddler ログJSESSIONID
は、要求で no が送信されたことを示しています。
さらに、request.getSession(false).getId()
同じ を返しますJSESSIONID
。
では、セッションはどのように/いつ/なぜJSESSIONID
インターセプターに到達する前に作成されたのでしょうか? クライアントから Cookie が送信されrequest.getRequestedSessionId()
なかった場合は、nullになると予想されます。JSESSIONID
そして、このように「オンザフライ」でセッションが作成されないようにするにはどうすればよいですか?
問題がある場合、要求されているリソースは次のように実装されます。
@Controller
public class LoginController {
.
.
.
@RequestMapping(value = { "/controller/index.do" })
public final ModelAndView login(final HttpServletRequest request, final HttpServletResponse response) {
.
.
.
編集 -この回答で述べたように、セッションがまだない場合、JSP ページへのすべての呼び出しが暗黙的に新しいセッションを作成することを理解しています。しかし、インターセプターに到達する前にこれが起こるでしょうか?
EDIT2 -インターセプターはのインスタンスですorg.springframework.web.servlet.handler.HandlerInterceptorAdapter