1

一.cookies

1.cookies的产生

cookies的产生是因为服务器端无法维持状态,服务器无法区分两个请求是否来自于同一个浏览器.

2.cookies是什么

cookies是服务器添加保存在客户端的一小块数据,即浏览器存储在用户电脑上的文本文件.

3.cookies举例详解

(1).创建cookie
<1>.服务器接受到客户端的请求后,在响应头中添加一个Set-Cookie选项

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).会话期cookie

浏览器会话期存在,浏览器关闭后,cookie自动删除,会话期间不需要设置过期时间(Expires)和有效期(Max-Age),有的浏览器提供会话恢复功能,即使关闭浏览器也会保留cookie.保存在内存中.

(3).持久性cookie

持久性cookie会设置过期时间或者有效期,保存在硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间
eg:Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;    

(4).cookie中的secure和HttpOnly标记

标记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选项

指定了cookie将要被发送到哪个或者哪些域中,默认情况下,会被设置为创建该 cookie 的页面所在的域名
eg: Set-Cookie: name=PHPSESSID; domain=segmentfault.com

(6).path选项

path选项指定了哪些路径可以接受cookie,以/为路径会匹配其下的所有子路径
eg:设置 Path=/docs,则以下地址都会匹配:
/docs
/docs/Web/
/docs/Web/HTTP

4.cookies应用场景

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)

二.localStorage和sessionStorage

1.localStorage的产生

由于cookie在客户端的存储大概是4k,过多的cookie会导致存储空间不足,需要一个能存储大量信息的仓库.

2.localStorage是什么

他实质是存储在客户端的hash表

3.localStorage API详解

(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).读取

 eg:
 //三种读取方式
 storage.a;
 storage.['b'];
 storage.getItem('c')

(3).删除

<1>.删除键值对

    storage.removeItem(key);

<2>.清除所有

    storage.clear();

4.cookie,localStorage和sessionStorage的区别

clipboard.png

三.session

1.session的产生

cookie是存储在客户端的,很容易被篡改,这个时候就需要一种相对较安全的存储方式,session应用而生.

2.session的定义

是将信息存储在服务器端的一种机制.当客户端第一次访问服务器时,会在服务器端生成一个session,当需要保存用户数据的时候自动保存到服务器的session中

3.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 消失

4.cookie和session的区别

1.cookie在存储在客户端,session在服务器端
2.cookie在客户端可以查看和修改,session不可以,session比cookie存储更安全
3.session的实现是基于sessionID,cookie中存有sessionID,所以,session是基于cookie的一种数据存储方式


Delia
75 声望3 粉丝

路漫漫其修远兮,吾将上下而求索。