localStorage和sessionStorage
共同点:
1.存储大小为5M左右
2.都有同源策略限制
3.仅在客户端中保存,不参与和服务器的通信。
不同点:
1.生命周期
localstorage:永久性的,除非用户人为删除否则会一直存在。
sessionstorage:与存储数据的脚本所在的标签页的有效期是相同的。一旦窗口或者标签页被关闭,那么所有通过session storage存储的数据也会被删除。
2.作用域-谁拥有数据的访问权
localstorage:在同一个浏览器中,同源文档之间共享数据,可以互相读取,覆盖。
sessionstorage:只有同一浏览器,同一窗口的同源文档才能共享数据。但是如果是一个窗口中,有两个同源的iframe元素的话,这两个iframe的 sessionStorage 是可以互通的。
Cookie
1.大小限制为4kb
2.主要用途是保存登录信息和标记用户,不过使用localstorage居多。
3.一般由服务器生成,可设置失效时间,如果在浏览器端生成Cookie,默认是关闭浏览器后失效。
4.每次都会携带在HTTP头中,如果cookie保存过多数据会带来性能问题。
5.原声API不如storage友好,要自己封装函数。
Cookie用法
服务端向客户端发送的cookie
Set-Cookie:<cookie-name>=<cookie-value>;(可选参数1);(可选参数2)
客户端设置cookie:
document.cookie = "<cookie-name>=<cookie-value>;(param1);(param2)"
可选参数:
Expires=<data>:cookie的最长有效时间,若不设置则cookie生命期与会话期相同。
Max-Age=<non-zero-digit>:cookie生成后失效的秒数。
Domain=<domain-value>:指定cookie可以送达的主机域名,若一级域名设置了则二级域名也能获取。
Path=<path-value>:指定一个URL,例如指定path=/docs,则"/docs"、"/docs/Web"均可以满足匹配条件。
Secure:必须在请求使用SSL或HTTPS协议的时候cookie才会呗发送到服务器。
HttpOnly:客户端无法更改Cookie,客户端设置cookie时不能使用这个参数,一般是服务器端使用。
Set-Cookie:sessionid=123123;HttpOnly;Path=/
可选前缀:
_Secure-:必须与secure属性一同设置,同时必须应用于安全页面(HTTPS)
_Host-:必须与secure属性一同设置,同时必须应用于安全页面(HTTPS)。必须不能设置domian属性(防止二级域名获取一级域名的cookie),path属性的值必须为“/”;
Set-Cookie:_Secure-ID=123;Secure;Domain=example.com
Set-Cookie:_Host-ID=123;Secure;path=/
Session
Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制。是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中。
在浏览器关闭后这次的Session就消失了,下次打开就不再拥有这个Session,其实并不是Session消失了,而是Session ID变了,服务器端可能还是存着上次的Session ID及Session信息,只是他们是无主状态,也许一段时间后会被删除。
大多数的应用都是用Cookie来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在Cookie里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器。
Session与Cookie的关系与区别:
- Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群,数据库,文件中,Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
- Cookie的安全性一般,他人通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优,重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了。
- 单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
- 当访问增多时,Session会较大的占用服务器的性能。考虑到减轻服务器性能方面,应当适时使用cookie。
- Session的运行依赖Session ID,而Session ID是存在cookie中的,也就是说,如果浏览器禁用了cookie,session也会失效(但是可以通过其他方式实现,比如在url中传递了Session ID,即sid=xxxx)。