1.会话技术的简介
会话技术是帮助服务器 记住客户端状态(区分客户端)。每个客户访问服务器端资源时,服务器并不知道该客户端是谁,但是为了识别不同的客户端,所以产生了会话技术。从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,为一次会话。会话技术是用于记录一次会话中客户端的状态和数据的。它可以分为两种会话技术:一种被称为Cookie技术;另一种被称为Session技术。
2.Cookie技术
Cookie技术是将用户数据存储到客户端的技术,它能够减少服务器d的存储压力,但是安全性相对于Session技术来说比较低,因为客户端可以清除Cookie。
//创建Cookie的函数
Cookie cookie = new Cookie(String cookieName,String cookieValue);
Cookie的cookieName和cookieValue都只能是字符串,而且有一个非常重要的地方就是Cookie不能存中文。当浏览器关闭的时候,没有设置持久化时间的Cookie信息会被销毁(也叫会话级别的Cookie),设置了持久化时间的Cookie信息就会存储到浏览器的磁盘文件中。利用设置持久化的时间也可以实现对Cookie的删除(把参数时间设置为0秒即可)。
//设置持久化的参数,参数单位是秒
cookie.setMaxAge(int seconds);
//删除cookie
cookie.setMaxAge(0);
当我们的客户端携带了Cookie的时候,我们可以通过设置其携带路径,限制Cookie的携带:
//设置携带路径的函数
cookie.setPath(String path);
cookie.setPath("/test"); //代表访问test应用中的任何资源都携带cookie
cookie.setPath("/"); //代表访问该WEB应用服务器中的任何资源都携带cookie
服务端创建并且设置好Cookie的内容后,就需要向客户端发送Cookie:
//向客户端发送Cookie
response.addCookie(Cookie cookie);
当服务端向客户端发送了Cookie之后,客户端则需要获取其Cookie的内容:
//获取cookie,返回的是一个Cookie的数组
Cookie[] cookies = request.getCookies();
最后通过遍历数组来获取我们需要的内容。
3.Session技术
Session技术是把数据存储到服务器端的技术,会为每个客户都创建一块内存空间存储客户的数据,但是客户端需要每次d都携带一个标识ID去服务器中寻找属于自己的内存空间,而且Session技术是基于Cookie技术上实现的,借助Cookie来存储客户的唯一标识JSESSIONID。Session技术把数据存储到服务器端,造成服务器端的压力较大,但是安全性相对于Cookie来说比较好。
创建Session对象:
//通过request调用Session
HttpSession session = request.getSession();
此方法会获得专属于当前会话的Session对象,如果服务器端没有该会话的Session 对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在 session了)
往Session中存储数据:
//设置Session中存储值(包括名字和对象)
session.setAttribute(String name,Object obj);
//通过名字来获取Session的值
session.getAttribute(String name);
//通过名字来删除Session里面的对象
session.removeAttribute(String name);
Session的手动销毁:
session.invalidate();
Session也是一个域对象,所以,相应地它也具有生命周期,它的作用范围是一次会话。当第一次调用request.getSession()的时候,Session对象被创建,Session对象的销毁有以下三种方法:服务器非正常关闭;Session过期或者失效;手动调用session.invalidate()函数进行销毁。而Session过期或者失效是根据当前的WEB应用服务器的配置来进行判断的,从不操作服务器端的资源开始计时,经过默认的一段之间后Session自动销毁。