# 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左右。localStorage
和sessionStorage
一般5M左右。
- 3、与服务器通信
cookie
每次都会携带在HTTP
头中,如果使用cookie
保存过多数据会带来性能问题。
localStorage
和sessionStorage
仅在客户端(即浏览器)中保存,不参与和服务器的通信
- 4、易用性
cookie
需要程序员自己封装,源生的Cookie
接口不友好。localStorage
和sessionStorage
都有封装好的接口。
# 5、session
session
存在于服务器端,依赖于cookie
(cookie
可以被人为的禁止,所以有其他机制可以在cookie
被禁用时,仍然能够把sessionId
传递到服务器`)。是服务端保存的一个数据结构,用来跟踪用户的状态。可以保存在内存、数据库和文件中。
session的原理:
- 1、用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建一个对应的
session
对象,并向客户端响应了一个cookie
,cookie
里面保存了sessionId
,这个时候会话才开始,(关闭浏览器会话也不会结束
)并根据sessionId
在session
池中寻找有没有该session
,没有则将之添加到session
池。(有一个默认存放时间,被取出时会重新设置默认存放时间
)。 - 2、用户第二次请求时,请求会自动判断此域名下是否存在
Cookie
信息,如果存在会将cookie
信息也发送给服务器。服务器根据客户端中的cookie
中的sessionId
去session
池中寻找会话。如果找到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
就没有这个限制。