Cookie ,Session
会话技术
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端态的状与数据的。
会话技术分为Cookie和Session:
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie
Session:将数据存储到服务器端,安全性相对好,但增加服务器的压力
Cookie
默认有效时间,一次会话中
Cookie在传输中无法传中文
创建Cookie对象:
Cookie cookie=new Cookie("名","值");
该cookie会以响应头的形式发送给客户端
设置Cookie在客户端的持久化时间: 单位:秒
cookie.setMaxAge(60*2); //时间到后自动清除
如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里
设置Cookie携带路径
cookie.setPath("/WEB07"); //只有访问
如果不设置携带路径,那么默认产生该Cookie资源下的路径都携带
发送Cookie给客户端
response.addCookie(cookie);
删除Cookie:
用同名同路径的持久化时间为0的Cookie覆盖
获取客户端携带给服务器的Cookie
Cookie[] cookie=request.getCookies();
获取Cookie的name:
getName();
获取Cookie的Value:
getValue();
Session
Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内 存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID
Session对象的生命周期:
创建:
第一次执行request.getSession()时创建
销毁:
服务器关闭时
服务器端的资源无任何操作30分钟
时间可以在工程的web.xml中进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
手动销毁session
session.invalidate();
获得Session对象
HttpSession session = request.getSession();
获取JSESSIONID
String id=session.getId();
Session也是存储数据的区域对象,所以通用三个方法:
session.setAttribute(String name,Object obj); //存值
session.getAttribute(String name); //取值
session.removeAttribute(String name); //删除
获取JSESSIONID
String id=session.getId();
当创建Session时会自动创建一个Cookie, name为JSESSIONID,值为随机产生的一串数,
通过JSESSIONID找Session域内的值,当浏览器关闭再打开时,Cookie会重新创建,JSESSIONID
的值也会变化,要想关闭浏览器在打开后还能找回原有的值就需要重新创建个同名Cookie设置持久化时间替代原有的Cookie
代码如下:
//获取Session
HttpSession session=request.getSession();
//获取JSESSIONID
String id=session.getId();
//向Session域中存数据
session.setAttribute("goods", 123);
//将JSESSIONID 持久化
//手动创建Cookie
Cookie cookie=new Cookie("JSESSIONID",id);
cookie.setMaxAge(60*3);//设置持久化时间时间
response.addCookie(cookie);//发送
response.getWriter().write("JSESSIONID:"+id);