目录
1、理解无状态
2、Session和Cookie理论
3、使用session存储数据
前言,理解session与cookie对于我们做web测试、接口测试、性能测试都是非常有帮助的。
cookie是一些数据信息,存储在浏览器端。
session是存储于服务器端的特殊对象,服务器会为每一个浏览器(客户端)创建一个唯一的session。这个session是服务器端共享,每个浏览器(客户端)独享的。我们可以在session存储数据,实现数据共享。
1、理解无状态
HTTP协议其中一个特点是:无状态。
无状态举例:假设浏览器发起一个登录请求,然后服务器做出响应,这个时候发起把一个商品加入到购物车的请求,但是服务器因为无法记住你之前已经登录成功的这个状态,它不给你把商品加入到购物车,它让你做登录操作。
2、Session和Cookie理论
Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。
浏览器第一次发送请求给服务器,服务器知道是第一次访问,就会分配一个Set-Cookie的一个响应头,比如说里面包含了一个cookie,叫做session-id,同时也会把本地存储一个session文件在服务器端,是为了保持服务器的一个状态,当浏览器接收到服务器分配的响应之后,把cookie保存在本地,后续浏览器再次发送请求之后,就会把浏览器分配的cookie带上去,然后服务器这个时候收到了你客户端所发起请求的cookie,会跟本地的cookie进行比对,从而验证你这个cookie的身份到底对不对。
3、使用session存储数据
session类似于一个Map,里面可以存放多个键值对,是以key-value进行存放的。key必须是一个字符串,value是一个对象。
通过setArrtibute(属性名,Object)方法存储数据
if (type == null || type == 0) {
//登录注册
session.setAttribute(Constants.CHECK_CODE_KEY, code);
} else {
//获取邮箱
session.setAttribute(Constants.CHECK_CODE_KEY_EMAIL, code);
}
通过getArrtibute(属性名)获取数据
if (!checkCode.equalsIgnoreCase((String) session.getAttribute(Constants.CHECK_CODE_KEY_EMAIL))) {
throw new BusinessException("图片验证码不正确");
}
通过removeArrtibute("属性名")从session中删除数据
session.removeAttribute(Constants.CHECK_CODE_KEY_EMAIL);
注意:session是一次会话有效,浏览器改变,则session改变