会话技术
在学习cookie和session之前先要了解什么是会话技术
会话:一次会话中包含多次请求和响应
- 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
功能:在一次会话的范围内的多次请求间共享数据
方式:
- 客户端会话技术:Cookie
- 服务端会话技术:Session
Cookie
1.概念: 客户端会话技术,将数据保存到客户端
2.使用方式:
cookie执行流程:客户端第一次请求服务器后,服务器产生并响应给客户端一个cookie,客户端得到后并保存,在第二次请求服务器时将客户端的cookie发送给服务器,服务器获取cookie并打印(得到的是cookie数组)
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!
注意:在没有设置cookie存活时间的前提下,只能是一次会话范围,期间关闭浏览器或服务器或者用另外的浏览器都将得不到结果
可以得到打印结果:msg:hello
3.实现原理
不管是发送还是获取cookie,他们都是通过http协议经行数据交互,第一次服务器响应时通过设置set-cookie
响应头给客户端发送消息,客户端遵循http协议得到set-cookie
中存储的值并保存,在下一次请求时该数据被放到请求头cookie
中,以上都是浏览器和服务器做的事,我们开发人员只是通过javaweb封装好的api来发送或者获取cookie,下面我们来看通过抓包工具来验证一下:
4.发送多个cookie
//1.创建cookie
Cookie c = new Cookie("msg","hello");
Cookie c1 = new Cookie("name","张三");
//2.发送cookie(服务器发送给浏览器)
resp.addCookie(c);
resp.addCookie(c1);
5.cookie存活时间
- 默认情况下,浏览器关闭Cookie数据被销毁(Cookie存储在浏览器内存中)
- 持久化存储:
- setMaxAge(int second)
- 参数为正数:将cookie数据写到硬盘的文件中,持久化储存,达到规定的时间将会被自动删除
- 参数为负数:默认值
- 参数为0:删除cookie信息
- setMaxAge(int second)
6.cookie存储中文
tomcat8之前不能存储中文信息,否则会发生错误
7.cookie共享
1.在一个tomcat服务器中部署了多个web项目,这些web项目中的cookie默认情况下不能共享
- setPath(String path):设置cookie的获取范围,默认情况下设置为当前虚拟目录,可以更改为"/",表示tomcat所有项目
2.不同tomcat服务器之间cookie共享问题
- setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
- setDomain(".baido.com"),那么news.baidu.com和tieba.baidu.com可以共享cookie
8.cookie特点和作用
特点
- cookie存储数据在客户端浏览器,不安全
- 浏览器对于单个cookie大小有限制 (4kb),以及同一个域名下的总cookie数量也有限制(20个)
作用
- cookie一般用来存储少量不太敏感的数据
- 在不登录的情况下,完成服务器对客户端身份的识别