Session服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中——HttpSession
但客户端需要每次携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间。
所以说Session技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。
2.1 获得Session对象
两中getSession方法:HttpSession session = request.getSession(false);
HttpSession session = request.getSession(true); request.getSession();
-
request.getSession(false)
得到session对象,原来有Session就直接返回,没有返回null -
request.getSession(true)
创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象。request.getSession();
不加参数默认就是true。
2.2 怎样向session中存取数据
Session也是存储数据的区域对象(域对象),所以session对象也具有如下三个方法:
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
2.3 Session对象的生命周期
创建: 第一次执行request.getSession()时创建
销毁:
- 服务器关闭时
- session过期/失效(默认30分钟)
问题:时间的起算点 从何时开始计算30分钟?
答:从不操作服务器端的资源开始计时
可以在工程的web.xml中进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- 手动销毁session (注销或者退出)
session.invalidate();
当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session.
2.4 Session与Cookie的区别
- Session存储数据在服务器端,Cookie在客户端
- Session没有数据大小限制,Cookie有
- Session数据安全,Cookie相对于不安全