三者相同点与不同点概述
相同点:都是存储在浏览器端的数据。
不同点:Cookie随着浏览器的请求一起发送到服务器端,有一定的过期时间,到期自动删除。Cookie很小,只有4KB。localStorage和sessionStorage同属于webStorage,都存储在浏览器端,大小比cookie大,有8MB。localStorage是持久化地存储在浏览器端,只要用户不主动删除,将一直存在,sessionStorage则存在于当前会话中,浏览器关闭会话后,它将被删除。
Cookie机制与Session机制的区别
Cookie 机制
Cookies是服务器在本地客户端中存储的一小段文本并随着每一个请求发送到同一个服务器验证。最开始时,web服务器使用HTTP头向浏览器发送cookies,在浏览器端,浏览器负责解析cookies并将他们保存成本地文件,浏览器会自动地将此服务器的任何请求附上这段cookies。
本质上,Cookie机制用于在客户端保存用户状态。Cookies的使用需要浏览器的支持,一旦浏览器禁用cookie,则其失去原有功能。Cookies主要用来弥补HTTP协议无状态的先天性缺陷。
具体过程
- 生成过程:web服务器通过在HTTP的响应头中加上一行特殊的提示以指示浏览器生成cookie。
- 使用过程:cookie的使用是浏览器按照一定的规则在后台自动发送给服务器。浏览器检查其存储的所有cookie,如果某一个cookie声明的作用范围大于等于将请求的资源所在位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
- cookie内容:主要包括名字,值,过期时间,路径和域。其中名字代表不同的cookie,过期时间则表明了这一个cookie的生命周期,如果不声明此内容,则代表cookie仅在此会话作用期间有效,故被称为会话cookie,这种cookie一般存在内存中而不是磁盘中。当设置了过期时间,cookie就会被存储在本地磁盘中,关闭浏览器这些cookie依然在指定时间内有效,有效的cookie可以在多个浏览器进程间共享。路径和域构成了cookie的作用范围。
Session机制
Session机制本质上是一种在服务器端保持状态的方案,服务器端使用一种类似于哈希表的结构存储数据。尽管在服务器端保存状态,但是在本地客户端也需要一个保存标志,所以session机制可能需要借助cookie机制来达到保存标识的功能。Session是针对每一个用户的,变量的值存在服务器端,用sessionID区分不同用户的session变量,这个变量值是用户在访问服务器时发送给浏览器的。当cookie被禁用时,可以使用get发送此信息到服务器。
具体过程
当客户端请求session时,服务器端首先要检查客户端的HTTP请求头中是否存在session标识,也就是前面提到的sessionID。如果发现包含此ID,则服务器无需创建新的session,直接检索此ID对应的session返回给客户端。如果发现请求头中不含sessionID,则需要为其创建一个session并生成独一无二的sessionID返回给客户端,客户端将此session保存在本地。
二者区别总结
Cookie和Session都可以进行会话跟踪,但是原理和特点不一样,现总结如下:
- 存储方式不同 cookie只能存储ASCII字符串,如果要存储Unicode或者二进制数据,都需要编码。而Session可以存储各种类型的数据。
- 隐私策略不同 Cookie存储在客户端中,对于客户端是可见的,客户端的一些程序可能能够窥探、复制或者修改cookie中的信息。Session则存储在服务器中,不存在敏感信息泄露的问题。如果使用cookie,最好使用加密算法将其加密。
- 有效期不同 方便下次登录,使用cookie非常方便。Session不能实现长时间保存状态。
- 服务器压力不同 session是保存在服务器端的,如果并发访问量很大的话,会产生大量session,给服务器带来很大的压力,耗费大量内存,因此大型网站不太可能使用session
- 浏览器支持不同 cookie是需要浏览器支持的。假如浏览器支持cookie,则cookie既可以在本浏览器窗口有效也可以在子窗口有效,还可以在一切浏览窗口有效。session只能在此窗口和其子窗口有效,其他浏览器窗口会有新的session。
- 跨域支持不同 cookie支持跨域名访问,session不支持,仅允许当前域名有效。