Cookie和Session

Posted acgq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie和Session相关的知识,希望对你有一定的参考价值。

Cookie和Session

为什么需要Cookie和Session

这就需要从HTTP状态协议 的无状态性开始说起了。 无状态协议是指协议对事物处理没有记忆能力 ,简单说来就是每个HTTP请求都是独立的,每个请求都只处理自己的信息,不与其他的请求发生关系。

HTTP是超本文传输协议,顾名思义,这个协议支持超文本的传输。 什么是超文本?简单来说就是使用html编写的页面。 HTTP协议的目的是在于支持超文本的传输,也就是资源的传输,客户端浏览器向HTTP服务器发送请求,继而HTTP服务器将相信资源发回给客户端这样一个过程中,无论对于客户端还是服务器,都没有必要记录这个过程 。所以HTTP协议被设计为无状态的协议是符合其要求的。

在早期的互联网,这就够了,但是随着互联网的发展,简单的资源传输不能满足用户的需求了,用户需要更丰富的需求。这时,cookie和session登场了,它们被设计用来为用户保存状态。

cookie是客户端保持状态的解决方案 ,第一次连接后, 服务器发送资源的同时也发送了一些cookie到用户浏览器,它们是保存在本地的一小块数据 ,在浏览器下次向同一个服务器再次发送请求的时候,cookie会被放在请求头中发送到服务器。

技术图片

这是访问Google的请求头信息,可以看到有一个Cookie字段,后面是一串很长的字符。

技术图片

这是Google在本地存储的cookie,简单介绍一下这个表格中的部分:

  • 域名:生成该cookie的域名
  • 路径: 指的是该Cookie是在哪个路径下生成的
  • HttpOnly:true指示浏览器不要在除HTTP(和 HTTPS)请求之外暴露Cookie

有了cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头中的cookie信息得到来自客户端特有的信息,从而动态生成与客户端相对应的内容。

Session

session是相对于cookie的另外一个解决方案,它是通过服务器来保持状态的。

session是服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建session的方法。在创建了session的同时,服务器会为该session生成唯一的sessionId,而这个sessionId被创建了之后,就可以调用session相关的方法往session中增加内容了,而这些内容只会保存在服务器中,发送到客户端的只有sessionId。当客户端再次发送请求时,会将这个sessionId带上,服务器收到请求之后就会根据sessionId找到对应的session,从而再次使用。这样的一个过程,让用户的状态得以保持。

Cookie和Session比较

cookie和session各有特点,我们需要根据其特点合理使用它们。

cookie和session的不同:

  • 保存地点不同
  • 大小不同,单个cookie不能超过4K,session没有限制
  • 存储格式不同,cookie一般只能存ASCII码,session没有限制
  • 有效期不同

cookie的几个缺点:

  • 安全性,cookie存储在客户端,有被修改的风险
  • 随着cookie的增多和访问量的增加,它会占用不少的带宽资源。

session的几个缺点:

  • 不容易在多个服务器中共享
  • session过多的话会比较消耗服务器的性能。

总结

cookie和session的出现是为了在无状态的HTTP请求中添加状态,使得服务器能够对客户端更加的了解。它的手段是在浏览器在本地存储cookie,在之后对满足要求的请求添加相应的cookie字段。本质上就是一个表明身份的标志。如果不使用cookie,我们也可以在请求URL中添加标志信息,或者在post请求体里面增加标志信息,只要能够表明身份,就可以做到和cookie类似的效果。

以上是关于Cookie和Session的主要内容,如果未能解决你的问题,请参考以下文章

session和cookie区别

session和cookie区别

Cookie 和 Session

Cookie 和 Session

问心 | 再看tokensession和cookie

cookie与session