首先,什么是会话:从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,我们称为一次会话。而会话技术就是记录这次会话中客户端的状态和数据的。
会话技术分为:Cookie和Session。
Cookie:Cookie技术是将数据存储到客户端的技术,减少了服务器端的存储压力,但是安全性不好,客户端可以手动清除cookie.
Session:Session技术是将数据存储在服务器端的技术,安全性相对好,但是增加了服务器的压力。Session会为每个客户端都创建一块内存空间来存储客户的数据,但是客户端每次都携带一个标识ID去服务器中寻找属于自己的内存空间。因此,Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。
Cookie技术
一、服务器端向客户端发送Cookie
1.1、创建cookie
Cookie cookie=new Cookie(name,value);
1.2、设置持久化时间
cookie.setMaxAge(int second);
为什么设置持久化时间?如果不设置持久化时间,cookie存储在浏览器的内存中,当浏览器关闭,cookie信息就会销毁,但是如果设置持久化时间,cookie信息就会存储在浏览器中,直到过了设置的持久化时间后,才会删除信息。
1.3、设置cookie的携带路径
cookie.setPath(String path);
为什么设置携带路径?如果不设置携带路径,那么,该cookie信息会访问产生该cookie的web资源所在路径都携带cookie信息。
1.4、向客户端发送cookie
response.addCppkie(Cookie cookie);
1.5、删除cookie
删除客户端存在的cookie信息,使用同名同路径的持久化时间为0的cookie进行覆盖即可。
二、服务器端接收客户端携带的cookie
通过request获得所有的cookie.
Cookie[] cookies=request.getCookies();
Session
获得Session对象:
HttpSession session=request.getSession();
向session中存取数据
Session是村塾数据的区域对象
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
Session作用范围:默认在一次会话中,也就是在一次会话中,任何资源公用一个session对象。
Session对象的生命周期?
创建:第一次执行request.getSession()时创建
销毁:三种方式:
1、服务器非正常关闭;
2、sessio过期/失效(默认30分钟)也就是从不操作服务器端的资源开始计时,30分钟后销毁。是否可以修改时间?web.xml可以配置
<session-config>
<session-timeout>5</session-timeout>//五分钟后自动销毁
</session-config>
3、手动销毁session
session.invalidate();
浏览器关闭,session是否就销毁?
不会立马销毁,存在于浏览器上的唯一标识符JSESSIONID消失了,但是服务器中存在的JSESSIONID没有消失,关闭的只是客户端,如果销毁,就需要等到销毁时间到了才会销毁。