cookie
什么是cookie
http协议是无状态的,也就是说浏览器对服务器的每次请求是单独的,服务端无法判断用户身份是否已经被认可。Cookie时机是一小段的文本信息(key-value格式)。客户端向服务端发起请求,如果服务器需要记录该用户状态,就是用response向客户端浏览器发送一个cookie,也就是通过set-Cookie请求头。客户端浏览器会把Cookie保存起来,当浏览器再次请求网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该cookie,一次来辨识用户状态。
作用
cookie主要用于以下三个方面:
- 会话状态管理(如用户登陆状态、购物车】游戏分数或其他需要记录的信息)
- 个性化设置(如用户自定义设置,主题等)
- 浏览器行为跟踪(如跟踪分析用户行为等)
cookie属性
| 属性项 | 属性项介绍 |
|---|---|
| name=value | 键值对,可以设置要保存的key/value,注意这里的name不能和起 |
| expires | 过期时间,在设置的某个时间点后该Cookie就会失效 |
| domain | 生成该Cookie的域名 |
| path | 该cookie是在当前那个路径下生成的 |
| secure | 如果设置了这个属性,那么只会在ssh连接是才会回传该cookie |
session
简介
session代表着服务器和客户端一次会话的过程。session对象存储特定会话所需的属性及配置信息。这样,当用户在应用程序的web页之间跳转时,存储的session对象中的变量将不会丢失,而是在整个会话中一直存储下去,当客户端关闭会话或者session超时失效会话结束。
运行机制
当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。如果有sessionid,服务器将根据该id返回对应session对象。如果客户端请求中没有sessionid,服务器会创建新的session对象,并把sessionid在本次响应中返回给客户端。通常使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器。如果用户禁用cookie,则要使用URL重写,可以通过response.encodeURL(url)进行实现;API对encodeURL的结束为,当浏览器支持Cookie时,url不做任何处理;当浏览器不支持Cookie的时候,将会重写URL将SessionID拼接到访问地址后。
cookie与session
关联
cookie和session有什么关联呢
需要cookie是因为http是无状态的,服务端并不知道是谁在想我请求,我们需要一个机制来告诉服务端本次操作用户是否登录,是否已通过验证。这套机制是需要cookie与session共同完成
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建创建对应的 Session,请求返回时将此 Session的唯一标识信息SessionID返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名。
当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。
区别
session与cookie有什么区别呢
- 作用范围不同,cookie保存在客户端,session保存在服务端
- 有效期不同,cookie可设置保存时长,session一般失效时间较短,客户端关闭或者session超时都会失效
- 隐私策略不同,cookie存储在客户端,比较容易遭到不法获取。session存储在服务端,比cookie安全
- 存储大小不同,单个cookie保存的数据不能超过4k,session可存储数据远大于cookie
webStorage
当数据需要被严格控制在客户端内,不需要持续将数据发回服务端时就需要webStorage
webStorage两个主要目标:
- 提供一种cookie之外存储会话数据的路径
- 提供一种存储大量可以跨会话存在的数据的机制
HTML5的webStorage提供了两种API,localStorage(本地存储)和sessionStorage(会话存储)
区别与联系
- 生命周期:
- localStorage:localStorage的生命周期是永久的,关闭页面或浏览器之后localStorage中的数据也不会消失。除非主动删除数据,否则数据永远不会消失
- sessionStorage:sessionStorage的生命周期是在当前会话下有效。sessionStorage引入了一个浏览器窗口概念,sessionStorage是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源的另一个页面,数据依然存在。但是在关闭浏览器后会被销毁。
- 存储大小都是5MB
- 存储位置:都保存在客户端,不与服务器进行交互通信
- 获取方式
- localStorage: window.localStorage
- sessionStorage:window.sessionStorage
- 应用场景
- localStorage:常用与长期登录(判断用户是否已登录),适合 长期存储在本地的数据
- sessionStorage:敏感账号一次性登录,sessionStorage存储的数据更偏向业务一些
cookie sessionStorage localStorage的区别
相同点:都是存储在浏览器端,且同源的
不同点:
- cookie数据会在同源的http请求中作为请求头携带,服务端可以通过set-Cookies响应头设置同源cookie的数据,localStorage、sessionStorage不会主动把数据发给服务端,尽在本地保存
- cookie可以通过设置domain和path来设置作用范围,localstorage、sessionstorage不可以
- 存储大小限制不同,cookie数据不能超过4k,因为http请求每次都会携带cookie信息,所以cookie只适合存储很小的数据,节省网络资源。sessionStorage、localStorage存储大小限制为5M或更大
- 数据有效期:sessionStorage进在当前浏览器窗口关闭之前有效。localStorage始终有效,主要用作持久数据。cookie可设置过期时间,过期之前一直有效,如果不设置过期时间则浏览器关闭就无效
- webStorage支持事件通知机制,可以将数据更新的通知发送给监听者
我们必须要注意session与sessionStorage并不相同。










