1.会话技术
从打开一个浏览器访问某个站点,到关闭整个浏览器的整个过程就是一次会话
会话技术分为:Cookie和Session
Cookie:数据储存在客户端本地(浏览器储存文件路径,减少了服务器压力,但安全性不好客户端可以清除Cookie
Session:将数据储存在服务器端,安全性相对好,增加服务器压力
2.Cookie
Cookie是存放在响应头和请求头中的
2.1)服务器创建一个Cookie,并将Cookie发送到客户端
a.创建Cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);
Cookie不能存放中文(只能存放String类型的)
b.设置Cookie的持久化时间
cookie.setMaxAge(int seconds);//单位秒
注意:如果不设置持久化时间,cookie会一直存在留在浏览器内存中(浏览器关闭cookie会销毁--会话级别);
如果设置了持久化时间cookie会保存到浏览器的磁盘文件中,
c.设置Cookie的携带路径
cookie.setPath("/WEB16");
注意:如果不设置携带路径,那么该cookie信息访问产生该cookie的web资源所在路径都携带cookie信息(即cookie所在的目录下)
d.向客户端发送Cookie
response.addCookie(Cookie cookie);//发送到响应头中,下次访问时请求头也会有了(第一次访问时请求头中没有)
e.删除Cookie
创建一个同名cookie,然后设置持久化时间为0即可
Cookie cookie = new Cookie("name","");
cookie.setPath("/WEB16");
2.2)服务器接收客户端的Cookie
获得客户端携带的cookie的数据 >>> 循环遍历 >>> 通过cookie名称获得想要的cookie
//获得客户端携带的cookie的数据
Cookie[] cookies = request.getCookies();
//Cookie cookie = new Cookie("name","zhangsan");
//通过cookie名称获得想要的cookie
if(cookies!=null){
for(Cookie cookie : cookies){
//获得cookie的名称
String cookieName = cookie.getName();
if(cookieName.equals("name")){
//获得该cookie的值
String cookieValue = cookie.getValue();
System.out.println(cookieValue);
}
}
}
3.Session
session是将数据储存到服务器端的技术,会为每个客户端都创建一块内存空间并生成一个唯一的JSESSIONID
session是基于cookie技术的,JSESSIONID就是储存在cookie中
3.1)获取session对象(划重点)
HttpSession session = request.getSession();
注意:getSession()方法内部会判断是否该客户端已经在服务器端有了seesion,如果没有就创建一个新的session,如果有则返回旧的session,(其实质就是通过请求中cookie中的JSESSIONID来判断是否存在)
3.2)向session中存入数据(划重点)
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
session也是一个域对象,它的范围为一次会话级别
3.3)设置session持久化
session默认在浏览器关闭是就会被清除掉(储存在Cookie中的JSESSIONID没了),我们可以通过设置cookie的持久化间接设置session的时间
String id = session.getId();//得到该session对象的编号id
//手动创建一个存储JSESSIONID的Cookie 为该cookie设置持久化时间(必须要设置路径)
Cookie cookie = new Cookie("JSESSIONID",id);//新建cookie覆盖
cookie.setPath("/WEB16/");//设置路径
cookie.setMaxAge(60*10);//设置时间(单位:s)
response.addCookie(cookie);//添加到客户端
3.4)session的生命周期
创建:第一次执行request.getSession();时创建
销毁:a.服务器关闭时(如果设置了持久化时间,浏览器关闭不会清除cookie)
b.session过期(默认三十分钟过期,这三十分钟是从没有使用session开始算起),可以通过web.xml设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
c.手动销毁:session.invalidate();
session的作用范围是一次会话中,也就是它是一次会话中的公用资源
总结:
Cookie技术:存到客户端
发送cookie
Cookie cookie = new Cookie(name,value)
cookie.setMaxAge(秒)
cookie.setPath()
response.addCookie(cookie)
获得cookie
Cookie[] cookies = request.getCookies();
cookie.getName();
cookie.getValue();
Session技术:存到服务器端 借助cookie存储JSESSIONID
HttpSession session = request.getSession();
setAttribute(name,value);
getAttribute(name);
session生命周期
创建:第一次指定request.getSession();
销毁:服务器关闭、session失效/过期、手动session.invalidate();
session作用范围:默认一会话中