# 1、cookie

cookie存在于浏览器端,是客户端保存用户信息的一种机制,用来记录用户的一些信息。是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头加上一行特殊的指示(set-cookie)以提示浏览器按照指示生成对应的cookie。主要用于以下三个方面。

  • 1、会话状态管理(保存用户登录状态等需要记录的信息)
  • 2、个性化设置(用户自定义主题、设置等)
  • 3、浏览器行为跟踪(跟踪分析用户行为)

cookie的原理:

  • 1、网络服务器用HTTP头向客户端发送cookies,在客户端,浏览器解析这cookies并将它们保存为一个文件。
  • 2、当客户端向服务器请求数据时,会自动带上cookie发送到服务器。

cookie的存活时间

cookie的内容包括:名字、值、过期时间、路径和域。路径和域一起构成cookie的作用范围。如果不设置过期时间,则表示该cookie的生命周期为浏览器会话期间,关闭浏览器窗口,cookie就消失,一般保存在内存中(会话cookie),如果设置了过期时间,该cookie则会被保存到硬盘里(硬盘cookie)。

# 2、sessionStorage

  客户端的存储,基于html5,本地存储。可以将数据在当前会话中保存下来。刷新页面数据依然存在,但是关闭页面后,sessionStorage中的数据就会被清空。

# 3、localStorage

  是HTML5标准中新添加的技术。本地存储,存储在本地硬盘。除非手动清除,否则永久保存。

# 4、Cookie, localStorage 与 sessionStorage的区别

  • 1、数据的周期生命

cookie可设置失效时间,默认是关闭浏览器后失效。
localStorage除非被手动清除,否则永久保存。
sessionStorage仅在当前会话下有效,关闭页面或浏览器后被清除。

  • 2、存放数据大小

  单个cookie一般4k左右。localStoragesessionStorage一般5M左右。

  • 3、与服务器通信

cookie每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。
localStoragesessionStorage仅在客户端(即浏览器)中保存,不参与和服务器的通信

  • 4、易用性

cookie需要程序员自己封装,源生的Cookie接口不友好。localStoragesessionStorage都有封装好的接口。

# 5、session

session存在于服务器端,依赖于cookie(cookie可以被人为的禁止,所以有其他机制可以在cookie被禁用时,仍然能够把sessionId传递到服务器`)。是服务端保存的一个数据结构,用来跟踪用户的状态。可以保存在内存、数据库和文件中。

session的原理:

  • 1、用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建一个对应的session对象,并向客户端响应了一个cookiecookie里面保存了sessionId,这个时候会话才开始,(关闭浏览器会话也不会结束)并根据sessionIdsession池中寻找有没有该session,没有则将之添加到session池。(有一个默认存放时间,被取出时会重新设置默认存放时间)。
  • 2、用户第二次请求时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在会将 cookie 信息也发送给服务器。服务器根据客户端中的 cookie 中的 sessionIdsession 池中寻找会话。如果找到 session 证明该用户已经登录并且可以执行后面的操作。

cookie被禁用时的处理

  • 1、URL重写,把 sessionId 直接附加在URL路径的后面。
  • 2、表单隐藏域(表单隐藏字段type="hidden"),服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把 sessionId 传递回服务器。

session会话结束的两种情况:

  • 1、服务器端的 session超时。
  • 2、用户将客户端的cookie 给清除了(session依赖cookie)。

# 6、cookie和session的区别?

  • 1、存取方式的不同

cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要先进行转码。
session能够存取任何类型的数据,包括但不限于String、Integer、List、Map等。

  • 2、隐私策略的不同

cookie存储在客户端中,对客户是可见的,客户端的一些程序可能会窥探、复制以至修正cookie中的内容。
session存储在服务器上,对客户是透明的,不存在敏感信息泄露的风险。

  • 3、有效期上的不同

cookie可以设置过期时间来保存用户信息在客户端保存的期限。
session依赖cookie,一旦cookie被清除,session就会失效。或者当客户端关闭会话,session超时失效导致会话结束。

  • 4、服务器压力的不同

cookie保管在客户端,不占用服务器资源。
session是保管在服务器端的,每个用户都会产生一个session。加入并发的用户非常多,会产生大量的session,消耗大量的内存。

  • 5、浏览器支持的不同

cookie是需要客户端支持的。假如客户端禁用了cookie或者不支持cookie,则会话跟踪会失效。
  假如客户端浏览器不支持cookie,则需要运用session及URL地址重写或者采用表单隐藏域。
  假如客户端支持cookie,则cookie可以设置为在本浏览器窗口以及子窗口内有效,也能够设为一切阅读器窗口内有效。但是session只能在本阅读器窗口及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用不同的session

  • 6、跨域支持上的不同

cookie支持跨域名访问。session不支持跨域名访问。仅在它所在的域名内有效。

  • 7、存储大小的不同

  单个cookie保存的数据不能超过4k,session就没有这个限制。

评 论:

Last Updated: 1/29/2021, 9:39:36 PM