Cookie
cookie 是浏览器储存在客户端上的一段文本文件,作用是通过存储并返回服务器一定格式的数据,让服务器识别用户。当cookie存在时,用户就可以带着身份浏览该网站的任意页面。
早期的 Web 应用面临的最大问题之一就是如何维持状态。简言之,服务器无法知道两个请求是否来自于同一个浏览器。当时,最简单的办法就是在请求的页面中插入一个 token,然后在下次请求时将这个 token 返回至服务器。这需要在页面的 form 表单中插入一个包含 token 的隐藏域,或者将 token 放在 URL 的 query 字符串中来传递。这两种方法都需要手动操作,而且极易出错。
当时网景通讯的一名员工 Lou Montulli,在 1994 年将 “magic cookies” 的概念应用到 Web 通讯中。他试图解决 Web 的第一个购物车应用,现在购物车成了购物网站的支柱。他的原始说明文档提供了 cookie 工作原理的基本信息,该文档后来被作为规范纳入到 RFC 2109(大多数浏览器的实现参考文档)中,最终被纳入到 RFC 2965 中。Montulli 也被授予 cookie 的美国专利。网景浏览器在它的第一个版本中就开始支持 cookie,现在所有 Web 浏览器都支持 cookie。
服务器通过发送一个称为 Set-Cookie 的 HTTP 消息头来创建一个 cookie,Set-Cookie消息头是一个字符串,其格式如下:
Set-Cookie: <cookie-name>=<cookie-value>
当浏览器拿到该消息头后,会把Set-Cookie:
后的key=value
格式内容存储在cookie文件中,并且在该地址下需要返回的内容中添加返回头
Session
session是存放在服务器端的一串数据,当浏览器发送请求时, 服务器自动生成一个session对象和一个session ID,并将session ID通过响应头发送至浏览器,当浏览器第二次发出请求时,会把之前接收到的session ID放在请求头中,服务器接收到数据并提取session ID后,通过识别对比来找到该用户对应的session对象。
- 使用cookie方法来保存和传输
- 使用URL附加信息,例如
xxx.com?sid=xxxx
- 使用隐藏域
Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。
cookie和session最大的区别在于一个保存在客户端(浏览器)一个保存在服务器。
cookie使用的是客户端内存而session使用的是服务器内存,所以尽量推荐用cookie来存储会话信息
但cookie相对于session来说更不安全,因为cookie可以在客户端被篡改,而session因保存在服务器,相对安全。
LocalStorage
LocalStorage是HTML5中新增的本地存储API,通常有5MB大小(不同浏览器标准不一)。
LocalStorage内储存的数据永久保存在浏览器内,直到被手动清除为止,而且,数据不会因为浏览器的关闭而丢失。
特点 \名称 | LocalStorage | cookie |
---|---|---|
存储时间 | 永久存储直到手动清除 | 若无一般设置则关闭时清除,若设置时间则只在时间内清除 |
存储大小 | 5MB | 4KB |
服务器通讯 | 数据不会每次传递,只在调用时传递数据 | 每次请求都会传递cookie,若保存数据过多会带来性能问题 |
SessionStrorage
SessionStrorages除了关闭浏览器会被清除之外,其他设置和特点与LocalStorage相同
参考连接: