一、会话技术介绍
1. 会话:为了实现某一个需求,浏览器和服务器之间会产生多次的请求和响应;
从打开浏览器访问服务器开始,到访问服务器结束关闭浏览器,
之间的多次请求和响应称为 “浏览器和服务器之间的一次会话”
2. 会话中的数据存储问题
如果使用request域的话,其是一次请求一次响应,作用范围太小;
如果使用ServletContext域的话,代表整个web应用,容易混乱;
所以采用Cookie技术和Session技术
一、定义
1.Cookie工作原理
Cookie是通过Cookie请求头和Set-Cookie响应头,将会话中的数据 保存在客户端 ; 是客户端的技术 ;
具体如下图:
二、相关操作
1. 创建Cookie
Cookie cookie = new Cookie(String name, String value);//创建Cookie 对象 cookie.getName();//获取Cookie的名字 cookie.setValue(String value);//设置Cookie的值
cookie.setPath(request.getContextPath()+"/");//在访问该应用下的任何一个资源时都能够将Cookie带回来 cookie.setMaxAge(0); |
2. 将Cookie添加到响应中
response.addCookie(Cookie cookie); //将Cookie对象添加到response响应中, 可以多次调用该方法, 将多个Cookie添加到响应中. |
3. 获取请求中的Cookie
request.getCookies(); //该方法会返回请求中所有的Cookie对象组成的数组, ;如果请求中没有任何Cookie信息, 则返回null |
4. 删除Cookie
1) 可以间接删除Cookie:可以向浏览器再发一个同名、同path、同domain(如果前后都不设置, 则domain默认是相同的)的Cookie ;
由于浏览器是根据Cookie的名字+path+domain来区分一个Cookie的,如果两个Cookie的名字+path+domain完全一致,则浏览器会认为是同一个Cookie,这时后发的Cookie会覆盖之前发送的Cookie,而后发的Cookie只要设置setMaxAge方法值为0,浏览器收到之后也会将后发的Cookie立即删除
三、常用方法
1. setMaxAge() 设置Cookie的最大存活时间(S)
如果不设置该方法, Cookie是默认保存在浏览器的内存中, (即默认生命周期为一次会话时间)
如果中途关闭浏览器, 随着浏览器内存的释放, 该Cookie信息也随着内存的释放而丢失!
如果设置该方法, Cookie将会以文件的形式保存在浏览器的临时文件夹中.
2. setPath() 设置cookie被浏览器带回来的路径
1) Cookie被浏览器带回来的路径默认是发送cookie的Servlet所在的路径
比如发送Cookie的Servlet为: http://localhost/day16_2/CookieDemo2
<< ---- >> cookie被浏览器带回来的路径就是 CookieDemo2 所在的路径:http://localhost/day16_2/,这就是根路径
这时, 浏览器在访问day16_2应用下任何一个资源时都可以带着Cookie, 例如:http://localhost/day16_2/aaa
2)这时希望该应用下的任何一个资源都可以将Cookie带回来
这时则需要设置Cookie的路径为当前WEB应用的根路径: cookie.setPath(request.getContextPath()+”/”);
备注:后面拼上斜杠的目的是:如果当前WEB应用是缺省的WEB应用, 则通过getContextPath方法获取到的WEB应用的路径为一个空字符串, 而路径不能为空, 所以后面拼上一个斜杠