学习笔记2:HttpSession对象

HttpSession对象

HttpSession对象是javax.servlet.http.HttpSession 的实例,该接口并不像HttpServletRequest或HttpServletResponse还存在一个父接口,该接口只是一个纯粹的接口。这是因为session本身就属于HTTP协议的范畴。

对于服务器而言,每一个连接到它的客户端都是一个session,也就是每一个连接到服务器的浏览器,servlet容器使用此接口创建HTTP客户端和HTTP服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话对应于一个用户,该用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息,比如会话标识符、创建时间和最后一次访问的时间。在整个session中,最重要的就是属性的操作。

session无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览器,则无法取得之前设置的session,因为每个session只保存在当前的浏览器中,并在相关页面取得。

session的作用就是为了表示一次会话,或者说确认一个用户;并在一次会话(一个用户多次请求)期间共享数据。我们可以通过request.getSession()方法,来获取当前会话的session对象。

Session对象的获取

Session通过request对象获取
当获取Session对象时,会先判断该Session是否存在,如果存在,将会获取Session对象,如果不存在,将会创建Session对象

		//获取session对象
        HttpSession session = req.getSession();

常用方法:

		//获取session的唯一会话标识符
        String id = session.getId();

        //获取session的创建时间
        System.out.println(session.getCreationTime());

        //获取session最后一次访问时间
        System.out.println(session.getLastAccessedTime());

        //判断是否是新的session对象
        System.out.println(session.isNew());

标识符 JSESSIONID

一次会话就有一个唯一的标识符,这个标志就是sessionId
每当一次请求到达服务器,如果开启了会话(访问了session),服务器第一步会查看是否从客户端回传一个名为JSESSIONID的cookie,如果没有,就会认为这是一次新的会话,会创建一个新的Session对象,并用唯一的ID为这次会话做一个标志。

如果有JESSIONID这个回传,服务器则会根据JESSIONID去查看是否有id为JSESSION值的session对象,如果没有则认为这是一次新的会话,重新创建以个session对象,并标识此次会话(这种情况例如服务器重启了,服务器里就没有这些对象了,传来ID也找不到相应的session对象)
如果有,则返回该session对象,数据达到共享。

这个名为JSESSIONID是一个比较特殊的cookie,当用户请求服务器时,如果访问了session,则服务器会创建一个名为JSESSIONID,值为获取到的session(无论是获取到的还是新创建的)的sessionid的cookie对象,并添加到response对象中,响应给客户端,有效时间为关闭浏览器。
所以Session的底层依赖cookie实现。

Session域

Session对象存于服务器内存中,所以可以用于多次请求之间的数据共享,而request域对象只能在一次请求中生效,相对于request域对象session的作用域更高。

Session对象的销毁

当客户端第一次请求servlet并且操作session时,Session对象创建生成,Tomcat中Session默认的存活时间为30min,如果这段时间没有操作session,就会自动销毁,如果一旦有操作,session会重新计时。

session的默认有效时间可以在Tomcat中的conf目录下的web.xml文件中进行修改。

<!--  session默认的最大不活动时间。单位:分钟-->
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>

除了以上的修改方式外,我们也可以在程序中设定session的生命周期,通过session.setMaxInactiveInterval(int)来设定session的最大不活动到期时间,单位为秒。

		//获取session对象
        HttpSession session = req.getSession();
        //设置session最大不活动时间,单位为秒
        session.setMaxInactiveInterval(15);//15秒

第三种:立即销毁(用的最多)
可以用于比如注销登录之类的

        //立即销毁 可以通过 session.invalidate() 方法让 session 立即失效
        session.invalidate();

第四种:关闭浏览器

因为session的底层依赖cookie实现,并且cookie的有效时间为关闭浏览器。从而session在浏览器关闭时也相当于失效了。

第五种:关闭服务器

当关闭服务器时,session销毁
Session失效意味着此次会话结束,数据共享结束

猜你喜欢

转载自blog.csdn.net/qq_40492885/article/details/115239090