cookie和session都是用来跟踪浏览器用户身份的会话方式。html
1.验证当前服务中继续请求数据时,哪些缓存数据会随着发往服务器?跨域
只有cookie中设置的缓存数据会发送到服务器端浏览器
2. 强调几点:缓存
(1) cookie 全部浏览器都支持安全
sessionStorage:(h5) 关闭浏览器时清除服务器
localStorage:(h5) 手动清缓存cookie
(这两种更像纯粹的存储缓存的对象)网络
(2) cookie 能够被禁用,因为cookie会缓存到本地指定的一个物理文件中,存在被用户删除的风险session
cookie是存储在document上的一个属性,对该属性的操做,就是对用户数据的存储和读取数据结构
3. 先说一下cookie 和 session 的不一样之处:
缘由以下:(1)sessionID存储在cookie中,若要攻破session首先要攻破cookie;
(2)sessionID是要有人登陆,或者启动session_start才会有,因此攻破cookie也不必定能获得sessionID;
(3)第二次启动session_start后,前一次的sessionID就是失效了,session过时后,sessionID也随之失效。
(4)sessionID是加密的
(5)综上所述,攻击者必须在短期内攻破加密的sessionID,这很难。
session:Session用于保存每一个用户的专用信息,变量的值保存在服务器端,经过SessionID来区分不一样的客户。
(1)网上商城中的购物车
(2)保存用户登陆信息
(3)将某些数据放入session中,供同一用户的不一样页面使用
(4)防止用户非法登陆
每次访问都要传送cookie给服务器,浪费带宽。
session:
4. 那到底什么是 cookie机制 和 sessio机制
首先HTTP是无状态的协议, 数据交换完毕以后,客户端与服务器端之间的链接就会关闭, 再次交换就要建议新的连接, 可是咱们有时候就须要来弥补HTTP的这个不足之处
cookie机制:
客户端请求服务器端的时候, 服务器端如何记录用户状态,就要使用response,向客户端发送一个cookie,客户端就会把cookie保存起来,浏览器再次请求服务端时就会把网址和cookie一块儿发给服务器,服务器检查cookie来辨别用户身份,因此cookie功能须要浏览器的支持,也就是说你不能禁用它
Session机制:
客户端访问服务器的时候服务器就会以某种形式保存下来, 服务端会有一个SESSIONID, 当再次访问时就会在服务器端查找, 若是找不到对应的sessionid, 那么就会建立一个session 并生成一个sessionid, sessionid会在本次响应中返回给客户端保存, 就是个不会重复的字符串, 也就是说你再请求服务端时, 首先要检查请求里是否有这个id, 而客户端保存sessionid并传去服务端的这个过程, 一般使用cookie来保存和发送
5. 本地存储 localStorage sessionStorage
WebStorage的目的是克服由cookie所带来的一些限制,当数据须要被严格控制在客户端时,不须要持续的将数据发回服务器。
本地存储能带来什么?
提供一种在cookie以外存储会话数据的路径
提供一种存储大量能够跨会话存在的数据的机制
那么如今来对比一下这两个之间的差别:
一、生命周期:
localStorage的生命周期是永久的,关闭页面或浏览器以后localStorage中的数据也不会消失。
localStorage除非主动删除数据,不然数据永远不会消失。
sessionStorage的生命周期是在仅在当前会话下有效。
sessionStorage引入了一个“浏览器窗口”的概念,sessionStorage是在同源的窗口中始终存在的数据。
只要这个浏览器窗口没有关闭,即便刷新页面或者进入同源另外一个页面,数据依然存在。
可是sessionStorage在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage也是不同的。
二、存储大小:localStorage和sessionStorage的存储数据大小通常都是:5MB
三、存储位置:localStorage和sessionStorage都保存在客户端,不与服务器进行交互通讯。
四、存储内容类型:localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可使用ECMAScript提供的JSON对象的stringify和parse来处理
五、获取方式:localStorage:window.localStorage;;sessionStorage:window.sessionStorage;。
六、应用场景:localStoragese:经常使用于长期登陆(+判断用户是否已登陆),适合长期保存在本地的数据。sessionStorage:敏感帐号一次性登陆;
本地存储的优势有哪些?
setItem (key, value) —— 保存数据,以键值对的方式储存信息。
getItem (key) —— 获取数据,将键值传入,便可获取到对应的value值。
removeItem (key) —— 删除单个数据,根据键值移除对应的信息。
clear () —— 删除全部的数据
key (index) —— 获取某个索引的key
6.cookie 操做
//设置cookie
//存储操做须要声明Key , value , expires , 指定缓存数据所在路径
//当不设置过时时间时,数据缓存在内存中,当设置过时时间是将来的一个时间点,则存在磁盘中,再次访问页面只要时间没到,就能够继续访问
function setCookie(key, value, expires, path){ if(!path) { path = "/" } if(expires) { var date = new Date(); date.setDate(date.getDate() + expires) document.cookie = key + "=" + escape(value) + ";expires="+data.toUTCString() + ";path=" + path; }else{ document.cookie = key + "=" +escape(value) + ";path=" +path; } }
//获取cookie
//页面1 : http://localhost:8080/path/review/modules/a.jsp
//页面2: http://localhost:8080/path/review/modules/b.jsp
//页面3 : http://localhost:8080/path/review/modules/html/c.jsp
//页面4 : http://localhost:8080/path/index.jsp
//当缓存数据写到路径1时 ,该缓存能够在页面123读到,而4不能够,cookie可跨多个网页,不可跨域名
//设置两次cookie path相同会覆盖
//对一个key值作覆盖,要注意覆盖路径和已缓存的key值路径是否一致
function getCookie(name){ var cookies = document.cookie; var cookieArr = cookies.split(";"); for( var i = 0 ; i < cookieArr .length ; i++){ var cook = cookieArr[i]; var cookArr = cook.split("="); if(cookArr[0] == name){ return unescape(cookArr[i]) } } return null; }
// 删除cookie
function removeCookie(name){ var date = new Date(); date.setDate(date.getDate() - 10); document.cookie = name + "=123;expires=" +date.toUTCString(); }
7. sessionStorage操做
页面关闭清除,有些浏览器会设置上限5M
API :
setItem (key, value) —— 保存数据,以键值对的方式储存信息。
getItem (key) —— 获取数据,将键值传入,便可获取到对应的value值。
removeItem (key) —— 删除单个数据,根据键值移除对应的信息。
window.sessionStorage.setItem("name", "Auyuer");
window.sessionStorage.getItem("name");
window.sessionStorage.removeItem("name");
8.localStorage操做
缓存数据是和服务器绑定的,不一样服务器之间不能够相互读取
手动缓存清除时可清除,有些浏览器会设置上限5M
(使用同sessionStorage)