地址栏JSESSIONID问题

     今天粘代码:)的过程中遇到了一个非常有意思的现象,首次登陆时浏览器URL后被追加SESSIONID

     前提:项目采用shiro进行权限控制,并且设置了setLoginUrl,如图:

                                            

     正常启动之后在浏览器输入http://localhost:8081,应该被重定向到http://localhost:8081/login,但是实际情况浏览器的URL的地址如下图,http://localhost:8081/login之后被追加了SESSIONID

      

    尝试着分析一下,如图:

                                 地址栏JSESSIONID问题_第1张图片

               1、client向server发送请求http://localhost:8081

               2、server端经由shiro进行内部内部URL重定向至http://localhost:8081/login

               3、server收到http://localhost:8081/login请求后,发现请求头中没有cookie(因为这次请求是server内部重定向的),那么server就认为client端禁用了cookie,并且为这次会话产生唯一标示即SESSIONID,并将SESSIONID追加到http://localhost:8081/login,作为response响应给client。如图:

                         地址栏JSESSIONID问题_第2张图片

               4、client收到server的响应后,以http://localhost:8081/login;JSESSIONID=XXX 为URL进行请求重定向(上图中302是重定向的状态码),最后展示出登陆页,如图:

                        地址栏JSESSIONID问题_第3张图片

               5、提交登陆信息后,server从请求信息中发现了cookie(因为这次请求是client发出的而非server内部重定向),会认为client没有禁用cookie,就不会进行URL重定向,而是将SESSIONID放入cookie之中,所以之后的请求URL就无需追加URL,如果此时手动删除client端的cookie,重新请求http://localhost:8081,就会发现SESSIONID再一次被追加到了URL后面。

    

 

你可能感兴趣的:(JAVA笔记,前端学习笔记)