Day20_学点儿JavaEE_Cookie、Session-2 Session

时间:2024-04-11 10:05:04

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();

  1. request.getSession(false)
    得到session对象,原来有Session就直接返回,没有返回null
  2. request.getSession(true)
    创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象。
    request.getSession(); 不加参数默认就是true

2.2 怎样向session中存取数据

Session也是存储数据的区域对象(域对象),所以session对象也具有如下三个方法:

  1. session.setAttribute(String name,Object obj);
  2. session.getAttribute(String name);
  3. session.removeAttribute(String name);

2.3 Session对象的生命周期

创建: 第一次执行request.getSession()时创建
销毁:

  1. 服务器关闭时
  2. session过期/失效(默认30分钟)
    问题: 时间的起算点 从何时开始计算30分钟?
    答: 从不操作服务器端的资源开始计时

可以在工程的web.xml中进行配置

<session-config>
        <session-timeout>30</session-timeout>
</session-config>
  1. 手动销毁session (注销或者退出)
    session.invalidate();

当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session.

2.4 Session与Cookie的区别

  1. Session存储数据在服务器端,Cookie在客户端
  2. Session没有数据大小限制,Cookie有
  3. Session数据安全,Cookie相对于不安全