Cookie--小知识总结

1、何为cookie

因为http协议是无状态的,因此无法知道当前访问的客户端是谁,因此有了cookie这个东西,经过cookie来让服务端知道当前是谁访问我,能够看作是一个身份牌前端

2、cookie的工做流程

(1) 第一次用户登陆的时候,输入用户名和密码信息,服务端接收后进行用户认证。node

(2)服务端经过验证后,生成一个token以cookie的形式放在http的response header中一块儿返回给客户端。后端

(3)浏览器根据是否设置cookie的过时时间判断该cookie是会话cookie仍是永久cookie,并将cookie存储在不一样的位置。跨域

(4)下次进行http请求时,请求头中会自动携带存储的cookie。浏览器

(5)服务端根据请求头中的cookie里面的token确认该用户的身份信息。服务器

3、配置cookie

cookie 一般由后端配置(固然前端也可配置),经过在http响应头部设置cookie来添加cookiecookie

前端设置cookie

使用document.cookie便可dom

好比:ui

document.cookie = 'name=ry;max-age=2000;domian=ryuan.me;path=/;secure'

cookie有如下的属性:this

  1. max-age:cookie过时的时间,表示多少秒后过时。
  2. expires:设置cookie过时的一个日期,表示在何时过时。max-age优先级高一些。
  3. domian:设置cookie存放的域,没有设置则为当前主机的域。
  4. path: cookie存储的路径
  5. secure: 加入此配置项,表示cookie只能经过https协议进行传输。

后端设置cookie

经过设置响应头部信息,添加cookie,经过http响应返回给浏览器便可,浏览器收到cookie会自动保存下来。

var http = require('http');
http.createServer(function(req,res){
    res.setHeader('status','200 ok');
    res.setHeader('Set-Cookie','name=yyyy;max-age=10000;path=/;');
    res.write('hello this is cookie test!!');
    res.end();
}).listen(8800,()=>{
    console.log('sever start at 8800');
});

后端能够设置cookie的属性,除了上述前端能够设置的以外,还有两个:

  1. httpOnly :添加来这个属性以后,表示前端不能JavaScript 经由 Document.cookie 属性、XMLHttpRequest 和 Request APIs 进行访问
  2. SameSite=Strict,SameSite=Lax
    容许服务器设定一则 cookie 不随着跨域请求一块儿发送,这样能够在必定程度上防范跨站请求伪造攻击(CSRF)

4、单点登陆

前提:cookie在不一样的域之间是不能够访问,修改的。可是在同一个一级域里面,cookie是能够共享的。

举个例子:

  1. (不一样域之间不能相互访问)跨域不能访问: 好比在qq.com和baidu.com之间是不能够访问到对方的cookie的
  2. 可是在同一个一级域里面,其子域是能够共享一个cookie的,好比在y.qq.com(QQ音乐的首页), v.qq.com(腾讯视频首页),他们两个都在qq.com这个一级域里面,因此,cookie在同一一级域里面能够共享,基于这个能够实现单点登陆(也就是在qq音乐登陆后,再访问腾讯视频后会自动登陆你的qq号)

怎么实现

在设置cookie时对domain赋值成同一一级域名便可

好比node中:

res.setHeader('Set-Cookie','name=yyyy;max-age=10000;path=/;domain=qq.com';)

我的笔记总结,仅供参考,大步走多回头

等什么望穿秋水 任来世枯朽成灰

Ry(元)http://www.cnblogs.com/Ry-yuan/

相关文章
相关标签/搜索