今天在做CAS单点登录时,发现访问客户端,在不关浏览器且只在同一个页签里访问的情况下,先访问客户端A登录成功,再访问B创建了ticket,刷新B则不会再创建ticket,再重新访问A,发现又创建了一遍ticket,不是已经创建过了session了吗?而且浏览器没有关闭,只是在同一个页签里也会导致之前的session被销毁吗?debug看代码,确实在再次访问A的时候session已经没了,不过那个地方写的是
这段是个人吐槽无需观看
以下是正文:
request.getSession(false);
这段代码代表,如果没有和当前request关联的session则不创建session并且返回空
request.getSession(true); 或者 request.getSession();
这两段代码等价,标识如果当前request关联了session则直接返回关联的session,如果没有则创建一个session
简单说一下:
1、当前request如果没有带着sessionid,那么肯定是没有关联session的
2、如果当前request带着sessionid,而服务器上没有匹配该sessionid的session,那么也是没有关联session
有的哥们看完后可能想直接写个jsp测试一下
但是在jsp中无论怎么测session都不会为空。
这是因为jsp的代码里面已经有了getSession():
上面jsp在初始化session的时候已经创建了session,所以到后边不论我怎么获取,这个session都是存在的。
解决办法就是加上session=false:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>
时间: 2024-11-08 20:52:11