Cookie和Session原理总结

一、Cookie

Http是一种无状态协议, 既上一次的请求和这一次的请求没有关联。在不同请求间无法进行数据传递,我们可以使用cookie进行客户端会话跟踪。

1、使用场景:

用于在页面登录中记住我/Remember me/多少天内免登陆、购物车添加物品等。

2、工作原理:

(1) 用户提交第一次请求时,由服务器生成cookie,并封装到响应头中,
将响应头【Set-Cookie:Key=Value】发给客户端

//创建cookie
Cookie cookie=new Cookie(key,value);
//向响应中添加cookie
response.addCookie(cookie);

(2) 客户端接收到响应后,将Set-Cookie中的数据全部保存在磁盘上。

(3) 当客户端再次发送请求后,在请求中会携带客户端的Cookie数据,发送到服务端,由服务器进行会话跟踪。

3、相关API

(1) 设置cookie有效日期。

//以秒为单位。设置cookie有效期1小时,参数值>0,将cookie存放到客户端磁盘上。
cookie.setMaxAge(60*60); 
//参数值=0,表示cookie一生成,马上失效。
cookie.setMaxAge(0);
//参数值<0,与不设置效果相同,会将cookie放入浏览器缓存中。
cookie.setMaxAge(-1);

(2) 设置路径

//request.getContextPath()获取项目部署名,/aaa为服务路径
cookie.setPath(request.getContextPath()+"/aaa");
二、Session

什么是会话呢?
当用户打开浏览器,从发出第一次请求开始,一直到最终关闭浏览器,就表示一次会话的完成。

1、使用场景:

访问敏感url时,使用session可以校验用户信息。

2、工作原理:

Session结构:Map < SessionID,Session>

(1) 用户第一次提交请求时,服务端Servlet执行request.getSession()方法,
会自动生成一个Map.Entry()对象,key为32位字符串的SessionID;Value为Session对象。

//create为true,有session就使用当前session,没有的话新建一个session。
//create为false,有session就使用当前session,没有的话返回null。
request.getSession(boolean create);
//有session就使用当前session,没有的话新建一个session。
//用法和request.getSession(true);相同
request.getSession();

Session列表

在这里插入图片描述

(2) 服务器把32为长度的随机字符串包装为cookie,发给客户端浏览器。其中cookie的name为SessionID,value为32为长度的字符串。

(3)浏览器接收到cookie后,保存到客户端浏览器中。

(4)客户端再次发起请求时,浏览器会把SessionID放到请求头信息中,发给服务器,服务器收到cookie后,通过key,找到value,既32为长度的字符串。在服务端Session列表中进行查找,通过字符串,找到的session。

三、Cookie和Session区别

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值