当我们浏览互联网页面时,有两项非常重要的技术正在默默地提升我们的用户体验:Cookie 和 Session。这两个概念是我们进行网络编程,特别是 Web 服务器编程时,用来实现跟踪用户状态的方案。
但是由于不同的编程语言之间使用 Cookie 和 Session 还是有略微的区别,因此,这里重点还是讲解一下概念性的知识,具体的代码实现就不做讲解,算是抛砖引玉吧。
什么是 Cookie?
Cookie 是由一个网站发送到浏览器的一小片信息,此信息被浏览器储存起来,之后每次浏览器都会将这片信息附加在请求中发送给服务器,这样服务器可以识别和追踪用户。
我们不妨将这个过程比作到一家餐厅用餐。店员(服务器)初次见到你(客户端)时,他在你的胸前贴上一个便签(Cookie),便签上记载了你的名字,这样他就可以在之后“记住”你。
这里的 Cookie,实际上就是“便签”,用以保存用户的一些信息。比如,你在网上购物时将商品添加到购物车,即使你离开了页面再返回,你的购物车里的物品还能保持不变,这就离不开 Cookie。这种优化给用户带来了很大便利。
什么是 Session?
Session,中文我们直译成“会话”。在 Web 环境中,服务器使用 Session 对象跟踪用户的状态。这可以通过嵌在用户请求信息中返回给服务器的 cookie 来完成,这个 cookie 包含了 session id。
再以餐厅为例,店员(服务器)为你准备了一张订单(Session对象),上面记载了你点的餐(用户信息),单子上写着你的名字(Session ID),并与你身上的便签(Cookie)上的名字相符。这样你就可以随时离开餐厅,并在返回时继续点餐,而店员还能按照订单为你服务。
只不过,在这里的“订单”,也就是 Session,是储存在服务器一方。这是由于 Cookie 的安全性并不足以存储所有类型的信息,特别是一些私敏信息,这就需要 Session 来进行专门的储存和处理。
Cookie 与 Session 有何区别?
存储位置不同:Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。 存储内容不同:Cookie 不是很安全,人们在使用过程中可能会禁用 Cookie,所以重要的信息一般放在 Session 中进行。 存储容量不同:单个 Cookie 保存数据不能超过 4K
,Session 没有这个限制。
Cookie 和 Session 的联系
我们知道,HTTP 协议本身是无状态的,也就是说,服务器无法知道用户上一次做了什么。 这样在处理如用户登录状态这样的问题上就显得非常无能为力。而 Cookie 和 Session,就是为了解决这个问题诞生的两种技术。
当用户第一次访问服务器时,服务器会为用户创建一个 Session,并生成一个唯一对应的 SessionID,然后把这个 SessionID 设置在响应的 Set-Cookie 字段中交由浏览器保存,浏览器在下一次请求时,会带着这个含有 SessionID 的 Cookie 发送给服务器,服务器就能通过这个 SessionID 找到上一次为用户保存的 Session,进而利用它提供连续的服务。
所以说,Session 和 Cookie 是紧密相关的,Cookie 作为载体承载 SessionID 的传递,而 Session 使用这个 SessionID 来区分是哪一个用户在与服务器交互。
各自的应用场景
Cookie 更适用于保存一些非敏感的、量小但需要长时间保存在客户端的信息。例如,为了优化用户体验,记住一个用户是否访问过该网站就需要用到 Cookie。
Session 更适用于存储一些敏感信息,例如,如果你在商城中购物,为保存购物车信息,或者你登录一个网站,为保存登录状态,那么就需要用到 Session。
总的来说,Cookie 适合存储一些客户端具体的、少量的信息,而 Session 适合保存一次会话过程中需要使用的信息。在实际应用过程中,根据需求的不同,我们可能会单独使用它们,也可能会结合使用。
但是在现在前后端分离的架构中,用的越来越多的反而不是 Cookie 和 Session 了,而是 Token 和 JWT。你知道为什么吗?
如果你想知道 Token 和 JWT 的相关知识,请在下方留个言,人多的话,下篇文章就安排一下。
最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们
往期精选:




