会话技术
会话是指从打开一个浏览器访问某个站点,到关闭这个浏览器的过程
而记录这过程中产生的数据有两种方式:Cookie和Session
1、Cookie
Cookie是将数据存储在客户端本地,减少服务器端存储压力,不安全,可能会被清除
- 服务器向客户端发送Cookie
- Cookie cookie = new Cookie(String cookieName, String cookieValue);//Cookie不能存储中文,可以有多个Cookie键值对
- cookie.setMaxAge(int seconds);//如果不设置持久化时间,浏览器关闭会自动销毁该Cookie,设置持久化后,会将Cookie存储到浏览器的磁盘文件中
- cookie.setPath(String path);//默认路径为整个web应用
- response.addCookie(cookie);//向客户端发送cookie
- 删除cookie:设置同名同路径Cookie持久化时间为0
- 服务器端接受客户端的Cookie
- Cookie[] cookies = request.getCookie();
- 遍历cookies数组,通过cookieName获得响应Cookie
2、Session
Session是将数据存储到服务器端,安全性较好,增加服务器存储压力。
Session技术会为每个客户端创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID(JSESSIONID)去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie的,持久化时间也与其相应的Cookie持久化时间一致
- HttpSession session = request.getSession();//获得当前会话的Session对象,如果服务器端没有该会话的Session对象则会创建一个新的Session返回,如果已经有则会直接返回该会话的Session
- Session也是一个域对象所以:
- session.setAttribute(String name, Object obj);
- session.getAttribute(String name);
- session.removeAttribute(String name);
- Session 的生命周期
- 创建:执行request.getSession(),并发现该会话中没有Session对象
- session失效时间:默认30mins,从不操作服务器端的资源开始计时
-
//过期时间可以在web项目的web.xml中进行配置 <session-config> <session-timeout>30</session-timeout> </session-config>
- 手动销毁session:session.invalidate();
- 作用范围:默认在一次会话中,该会话中任何资源公用一个session对象