Cookie和Session的区别

本文详细解释了Session和Cookie的概念、应用场景、作用以及它们之间的关系。Cookie用于存储用户信息,实现状态保持,而Session是服务器端的状态跟踪机制。两者在浏览器和服务器端的生命周期、存储位置和作用场景上有所区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈session和cookie

最近写了好多次登录注册的业务接口,那不免会听到session、cookie等概念。那么他们是什么呢?之间的关系?有啥作用呢?我这次终于好好捋清楚他们的关系了,这次做一次学习总结。

背景

​ 先讨论Session和Cookie,我们先了解其诞生的背景,毕竟需求推动技术的

​ 基于以前的互联网的网络协议的请求是HTTP(无状态的网络请求协议),意味着每个单独的请求之间是相互独立、互不相关的,服务器在处理一个请求后并不会保存任何关于客户端状态的信息。这样带来的弊端就是服务端无法判断客户端发来的请求是哪个用户发起的,因此我们就需要对状态保持进行额外处理,这就诞生了Cookie和Session。

Cookie

概念

​ Cookie(HTTP Cookie)是由服务器(服务端)发送到用户浏览器(客户端)并保存在用户本地计算机上的小型文本文件可持久化)。Cookie 用于存储特定网站的用户信息(状态保持),以便在用户访问同一网站时可以检索和使用这些信息。

应用场景

概念似乎晦涩难懂,以一些应用场景举例,就可能体察到Cookie的存在啦

  1. 用户登录,存储账号密码

这个就必须是首次登录成功后,浏览器会提示用户是否要保存账号信息,这个本质就是通过Cookie进行用户信息的存储,下次就可以直接免登陆操作了。

PS:免登陆不是说不用通过数据库查询,而是下次登录的信息从Cookie中取出。

在这里插入图片描述

  1. 会话管理

用于检测用户是否在网站登录后有进行连续操作(访问网站资源),否则超过过期时间,则会消失,即用户就得重新校验身份。例如:哔站登录后不作任何操作,30天过需要重新登录。

  1. 个性化体验

这种存储个人偏好配置,采用的方案之一就有是Cookie进行的。个人偏好配置比如:暗黑模式,页面布局、语言选择等等。

作用

通过上面的介绍,Cookie的作用也应该已经呼之欲出了!这里还是总结一下~

  • 服务器识别用户,保持用户在跳转页面时会话状态的一致性。
  • 实现免登陆,自动进行身份验证
  • 保留个性化体验

存储位置

既然Cookie是存储在本机的小型文本,那么它具体存储在哪里呢?

答:不同的浏览器和不同的操作系统,Cookie存储本机的位置都是不同的。见下图(Chatgpt如是说)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Session

Session的中文名是会话,Session和Cookie可谓是“黄金搭档”,有了Cookie就一定有Session。

概念

​ 会话(Session)是指在用户与服务器**(服务端)**之间建立的一个交互周期。它允许服务器跟踪用户在一系列请求和响应之间的状态,从而实现一定程度的状态保持。意思就是我们常说的Session是存在于服务端的一个概念,用于跟踪用户的请求和响应。

问题:

  1. 浏览器的Cookie里面也有session,和服务端的Session的区别是什么?

答:前者的Session又称之为会话Cookie,他是属于浏览器进程中Session,一旦关闭浏览器,会话Cookie就会被杀死,因此是不具持久化的;后者的Session是创建于服务端,他可以被持久化,可以存储多个地方,如:内存,磁盘等。

Cookie和Session的关系

我以关系图来表示,这样显得更直观。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Session的生命周期

这里就得要分类讨论了,浏览器的Session(会话Cookie)和服务端的Session的生命周期是不一样的。

  • 会话Cookie:

    ​ 浏览器端的 Session 存储在用户的浏览器中,通常在用户关闭浏览器时结束。这种 Session 只在用户的当前浏览器窗口或标签页内有效。当用户关闭浏览器时,浏览器通常会清除与该 Session 相关的 Cookie 数据。

  • Session:

    ​ 服务端的 Session 存储在服务器上,其生命周期通常由服务器的配置来控制。服务端的 Session 可以在用户的多个请求之间保持状态,而不受用户关闭浏览器的影响。

问题:

  1. 不同用户在同一个浏览器同一个标签页发起同一个请求,sessionId相同吗?

    是相同的,但这样当前的session的value会被下一个请求的session的value覆盖。(前提是session的key是相同的)

  2. 同一个浏览器不同的标签页发起同一个请求,sessionId相同吗?

    是相同的,因为依旧遵照这同一个浏览器同一个请求,其sessionId是不变的。

  3. 不同浏览器发起同一个请求,sessionId相同吗?

    是不同的,因为请求的对象都变了,sessionId肯定不同

口说无凭,我进行了实验,写了一个很简单的请求,进行了测试。

    @GetMapping("/test")
    public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String id = request.getSession().getId();
        response.getWriter().write(id);
    }

Edge浏览器的SessionId:
在这里插入图片描述
在这里插入图片描述
Chrome的SessionId
在这里插入图片描述

总结:不管是否是同一个用户还是不同的标签,只要符合同一个浏览器同一个请求,那么的sessionId一定是相同的!

参考

服务器端Session、客户端Session和Cookie的区别_session在网络应用中称为会话,每个用户首次与web服务器建立连接时,就会产生一个se-优快云博客

java中session的用法与原理-优快云博客

session何时被创建,何时被销毁以及设置session过期时间_session对象在什么时候被创建-优快云博客

Session的生命周期和工作原理-优快云博客

session什么情况下会改变_什么样的情况下会出现不同session-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brilliant.Louis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值