一 概述
当浏览器第一次给服务器发送请求时会建立一次会话,直到一方断开为止,一次会话一般包含多次请求和响应。主要作用时保证在这次会话的范围内实现数据的共享。
实现的方式有:1.客户端会话:Cookie;2. 服务端会话:Session;
二 会话之客户端会话——Cookie
客户端会话技术——Cookie,主要是将共享数据保存在客户端。
客户端会话的实现:
发送数据:
public class CookieSend extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建Cookie对象,绑定数据.
Cookie c = new Cookie("msg","hello");
//2.使用HttpServletResponse 参数发送Cookie.
response.addCookie(c);
}
}
接收数据:
public class CookieAccept extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3. 从HttpServletRequest中获取共享的Cookie
Cookie[] cookies = request.getCookies();
//获取数据,遍历Cookies
if(cs != null){
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name+":"+value);
}
}
}
}
Cookie的实现原理:基于会话中上一次请求的响应header中的set-cookie和这次请求的请求header中的cookie实现。
Cookie的几个重要性质:
1. 一次可以发送多个cookie,我们可以创建多个Cookie对象,并且使用HttpServletResponse调用多次addCookie()方法来发送cookie即可。
2. 默认情况下,当浏览器关闭时,Cookie数据会被销毁,如果我们需要灵活的控制Cookie的保存时间时,可以使用setMaxAge(int seconds)方法进行设置。
当 seconds为正数时,此时会将Cookie数据持久化到硬盘的文件中进行持久化存储,并且指定存活时间,时间到后,cookie文件会自动失效。
当 seconds为负数时,此时就是默认情况。
当 seconds为零时,就会删除cookie。
3. 在tomcat8之前cookie中是不能够存储中文数据,需要将中文数据转码(一般采用URL编码)。而在tomcat8之后,cookie中是支持中文的,但是一些特殊字符是不支持的,所以建议使用URL编码,然后使用URL解码解析。
4. cookie存在两种共享方式:
(1)假如在一个tomcat服务器中,部署了多个web项目,这时候不同项目的cookie默认是不能共享的,但是我们可以通过setPath(String path) 方法设置cookie的获取范围,默认情况下,设置当前的虚拟目录,如果想要将多个项目的cookie进行共享,我们可以将path设置为“/”;
(2)我们可以通过setDomain(String domain)方法进行不同tomcat服务器之间的cookie共享,如setDomain(".baidu.com"),那么可以保证一级域名为.baidu.com的tomcat服务器之间可以进行数据共享,即tieba.baidu.com和news.baidu.com中的cookie可以共享。
Cookie的特点和作用:
1. cookie是保存在浏览器客户端中的数据。
2. 浏览器对于单个cookie大小的限制是(4kb)以及对于同一个域名下的总cookie的数量限制为20个。
3. cookie一般用来保存少量不太敏感的数据。
4. 在用户不登陆的情况可以通过cookie的内容完成服务器对客户端的身份识别。