cookies的产生是由于服务器端没法维持状态,服务器没法区分两个请求是否来自于同一个浏览器.
cookies是服务器添加保存在客户端的一小块数据,即浏览器存储在用户电脑上的文本文件.
(1).建立cookie
<1>.服务器接受到客户端的请求后,在响应头中添加一个Set-Cookie选项php
eg: HTTP/1.0 200 OK Content-type: text/html Set-Cookie: yummy_cookie=choco Set-Cookie: tasty_cookie=strawberry <2>.浏览器在收到响应后保存下cookie,以后的每次请求都会将cookie发送给服务器,另外,Cookie的过时时间、域、路径、有效期、适用站点均可以根据须要来指定。 GET /sample_page.html HTTP/1.1 Host: www.example.org Cookie: yummy_cookie=choco; tasty_cookie=strawberry
(2).会话期cookiehtml
浏览器会话期存在,浏览器关闭后,cookie自动删除,会话期间不须要设置过时时间(Expires)和有效期(Max-Age),有的浏览器提供会话恢复功能,即便关闭浏览器也会保留cookie.保存在内存中.
(3).持久性cookiejava
持久性cookie会设置过时时间或者有效期,保存在硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过时时间 eg:Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
(4).cookie中的secure和HttpOnly标记node
标记Secure须要经过https协议通道加密后发送给服务器,但由于Cookie有其固有的不安全性,Secure 标记也没法提供确实的安全保障从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)没法使用Cookie的 Secure 标记。 为了不经过Document.cookie进行跨域脚本(XSS)攻击,就要用HttpOnly标记 eg:Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
(5).domain选项segmentfault
指定了cookie将要被发送到哪一个或者哪些域中,默认状况下,会被设置为建立该 cookie 的页面所在的域名 eg: Set-Cookie: name=PHPSESSID; domain=segmentfault.com
(6).path选项跨域
path选项指定了哪些路径能够接受cookie,以/为路径会匹配其下的全部子路径 eg:设置 Path=/docs,则如下地址都会匹配: /docs /docs/Web/ /docs/Web/HTTP
会话状态管理(如用户登陆状态、购物车、游戏分数或其它须要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)浏览器
因为cookie在客户端的存储大概是4k,过多的cookie会致使存储空间不足,须要一个能存储大量信息的仓库.安全
他实质是存储在客户端的hash表
(1).设置服务器
eg: //三种设置字段的方式 f(!window.localStorage){ alert("浏览器支持localstorage"); return false; }else{ var storage=window.localStorage; //写入a字段 storage["a"]=1; //写入b字段 storage.a=1; //写入c字段 storage.setItem("c",3); console.log(typeof storage["a"]); console.log(typeof storage["b"]); console.log(typeof storage["c"]); }
(2).读取cookie
eg: //三种读取方式 storage.a; storage.['b']; storage.getItem('c')
(3).删除
<1>.删除键值对
storage.removeItem(key);
<2>.清除全部
storage.clear();
cookie是存储在客户端的,很容易被篡改,这个时候就须要一种相对较安全的存储方式,session应用而生.
是将信息存储在服务器端的一种机制.当客户端第一次访问服务器时,会在服务器端生成一个session,当须要保存用户数据的时候自动保存到服务器的session中
客户端为client,服务器为server
(1).生成sessionId:当client第一次访问server时,server会生成一段随机数,即sessionID,将sessionID放在响应头中,以cookie的形式返回给client,大概是这样:cookie:sessionID=1234567.
(2).保存sessionId及用户数据:server将用户数据保存到sessionID下,再将sessionId保存到内存中.
(3).访问session,当client再次访问server时,client会带上首次访问server时得到的值为sessionID的cookie,server在拿到cookie中的sessionID去内存中查找,若是找到就返回给client.
注意:
java,保存于服务器内存中,重启服务器,session 消失
php,保存于服务器文件中,重启服务器,session 依然存在
nodejs,保存于服务器内存中,重启服务器,sessino 消失
1.cookie在存储在客户端,session在服务器端2.cookie在客户端能够查看和修改,session不能够,session比cookie存储更安全3.session的实现是基于sessionID,cookie中存有sessionID,因此,session是基于cookie的一种数据存储方式