概述:
用户打开浏览器,访问web服务器的资源,会话建立,直到有一方(客户端/服务器)断开连接,会话结束。
就相当于打电话,如果接通了,会话就建立了,双方就可以对话了。如果任意一方挂断电话,会话就结束了。
-
从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了
-
会话被建立后,如果浏览器或服务端都没有被关闭,则会话就会持续建立着
-
浏览器和服务器就可以继续使用该会话进行请求发送和响应,上述的整个过程就被称之为会话
概述:
一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。
-
服务器会收到多个请求,这多个请求可能来自多个浏览器
-
服务器需要识别请求是否来自同一个浏览器
-
服务器用来识别浏览器的过程,这个过程就是会话跟踪
-
服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据
二、cookie 1.cookie是什么思考问题1:一个会话中的多次请求为什么要共享数据呢?
在购物网站上购物时,需要先登录网站才能购物,而在真正购物时,你需要向服务器发送一个请求,而且你需要向服务器证明你的用户身份,否则服务器就会不知道购买者是谁,这时就需要共享刚才登录请求的数据;
思考问题2:为什么服务器和浏览器之间不支持数据共享?
浏览器和服务器之间使用的是HTTP请求来进行数据传输
HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求
HTTP协议设计成无状态的目的是让每次请求之间相互独立,互不影响
请求与请求之间独立后,就无法实现多次请求之间的数据共享
客户端会话技术,将数据保存到客户端(浏览器),以后每次请求都携带Cookie数据进行访问
2.cookie的基本使用对于cookie的使用,我们主要来看后端的操作,发送cookie和获取cookie
发送cookie
//创建cookie对象,并设置数据
Cookie cookie = new Cookie("key","value");
//发送cookie到浏览器
response.addCookie(cookie);
发送Cookie其实就是把Cookie添加到响应头里
接收cookie
//获取cookie
Cookie[] cookies = request.getCookies();
//遍历cookie数组
for (Cookie cookie : cookies) {
//获取cookie的键
System.out.println(cookie.getName());
//获取cookie的值
System.out.println(cookie.getValue());
}
3.cookie的使用细节
1)cookie的存活时间
//cookie对象的一个方法,用来设置cookie的存活时间 setMaxAge(int seconds)
参数取值:
-
负数:默认值,将cookie存在浏览器的内存中,当浏览器关闭时,cookie就会被销毁
-
正数:将Cookie写入浏览器所在电脑的硬盘的txt文件里,持久化存储。到时间自动删除(时间单位:秒)
-
零:删除cookie
2)cookie存储中文
经过自己的实验,发现在最新的edge、firefox和谷歌浏览器中可以直接存储中文,无需处理。但是为了兼容性,还是建议对要存储的中文进行处理,因为在一些版本较老的浏览器上存储中文可能会报错。
cookie存储
//对咬存储的中文进行编码处理
String food = URLEncoder.encode("牛肉干", "UTF-8");
//创建cookie
Cookie cookie = new Cookie("food", food);
//发送cookie
response.addCookie(cookie);
cookie获取
//获取cookie数组
Cookie[] cookies = request.getCookies();
//便利cookie数组
for (Cookie cookie : cookies) {
if (cookie.getName().equals("food")) {
//对获取的值进行解码
String value = URLDecoder.decode(cookie.getValue(), "UTF-8");
System.out.println(cookie.getName() + ":" + value);
break;
}
}



