【Session】—— 服务器上的会话主菜

 

Session

概念:服务器端会话技术,将数据保存在服务器端的对象中 —— HttpSession
 
快速入门:

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

session.setAttribute(String, Object)		
session.getAttribute(String)						// 值得注意的是,返回的是Object ———— 通常需要强转
session.removeAttribute(String)

 
实现原理

Session的实现以依赖于Cookie的(底层依旧是响应头和请求头)

如何保证每次获取的都是同一个Session对象呢?
在这里插入图片描述

 
Cookie细节
 
Q:客户端关闭后,服务器不关闭,两次获取的Session是同一个吗?

A:一次会话结束了,显然不再是同一个。
  浏览器关闭后,Cookie被销毁,但我们有办法让存有JSESSIONID的Cookie保留下来——存在硬盘中:

Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);

Q:客户端不关闭,服务器重启后,两次获取的Session是同一个吗?

A:Session是服务器中的对象,服务器关闭对象被释放,下次又会获取一个Session对象——它们显然不是同一个
  如果即使重启服务器,我们也不希望session中的数据丢失呢?
  服务器正常关闭时,进行session的钝化(序列化到硬盘上);再次开启时,进行session的活化(解序列化到内存中)
  (这个过程在IDEA中无法实现。但直接操作tomcat时,这些都是自动完成的 ! ! ! )
 
Q:Session什么时候被销毁?

A: 1. 服务器关闭,Session对象被释放
  2. 浏览器关闭,Cookie被销毁,该id的Session无法被访问到。下一次会创建一个新的id的Session。(其实原先Session没有销毁)
  3. Session对象自杀 session.invalidate()
  4. Session对象默认自动失效时间:30min(web.xml中可以配置)

 
 

Session的特点和作用

  1. Session将一次会话的多次请求的数据,存储在服务器端
  2. Session可以存储任意类型(Object)、任意大小任意数量的数据
  3. (↑说明)Cookie存储在浏览器的进程中,自然不能过多过大;而Session只是利用Cookie存储对象id,实际上本身是一个位于服务器的对象,因此没有这些限制

 

Session与Cookie的区别

  1. session将一次会话多次请求的数据存储在服务器端,Cookie在客户端
  2. session没有数据类型,大小,数量的限制,Cookie有
  3. session数据安全,Cookie相对于不安全

 

 
 

 

 

 

 

 

 

 

 

 

End ♬

by a Lolicon ✪

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页