一、何为cookie

由于http协议是无状态的,所以没法知道当前访问的客户端是谁,所以有了cookie这个东西,通过cookie来让服务端知道当前是谁访问我,可以看做是一个身份牌

二、cookie的工作流程

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

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

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

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

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

三、配置cookie

cookie 通常由后端配置(当然前端也可配置),通过在http响应头部设置cookie来添加cookie

前端设置cookie

使用document.cookie即可

比如:

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

cookie有以下的属性:

  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)

四、单点登录

前提: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/

Cookie--小知识总结的更多相关文章

  1. Session & Cookie小知识~

    Cookie 一个HTTP cookie的(也称为网络Cookie,互联网的cookie,浏览器cookie,或者干脆饼干)是一小块从发送的数据的网站用户的并存储在用户的计算机上的网页浏览器,而用户浏 ...

  2. 关于Cookie的知识的总结

    Cookie的类型 会话cookie和持久cookie 会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好,当用户退出浏览器时,会话cookie就会被删除. 持久cookie的 ...

  3. 蓝牙Bluetooth技术小知识

    蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...

  4. HTML+CSS中的一些小知识

    今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...

  5. iOS APP开发的小知识(分享)

          亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...

  6. Unix系统小知识(转)

    Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...

  7. salesforce 零基础开发入门学习(十)IDE便捷小知识

    在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...

  8. Jquery:小知识;

    Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器   上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...

  9. HTML小知识---Label

    今天知道了一个html小知识: <input type="checkbox" id="chkVersion" />                 ...

  10. Unicode和汉字编码小知识

    Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...

随机推荐

  1. jdk8新特性(详解)

    最近在复习外加看点面试题,jdk8的新特性虽然在项目用用到过一两个,准备系统的了解一下jdk8的常用新特性 一:Lambd表达式 也可称为闭包         引入函数式编程到Java中 为了使现有函 ...

  2. [wxgl] load image fail

    微信小游戏 let loader = new THREE.TextureLoader() let texture = loader.load('./images/bullet.png') 报错 参考 ...

  3. vscode 开发 Java web 急速教程

    1.确认在本机已安装 JAVA SDK 2.确认在本机已安装 maven 3.确认在本机已安装 tomcat 下面是我本机相关软件版本: java version "1.8.0_191&qu ...

  4. [Swift]正则表达式工具类

    正则表达式工具类 import Foundation //基于NSRegularExpression api 的正则处理工具类 public struct Regex { private let re ...

  5. PHP错误处理函数register_shutdown_function

    当程序在线上运行时,如果遇到BUG,想不在前端输出错误信息,同时能及时邮件通知开发者,register_shutdown_function函数就可以派上用场了. 注册一个会在脚本执行完成或者 exit ...

  6. 在word 2010中采用EndNote X7插入引用

    本文只供入门操作,记于此以防自己忘记,或帮助走过路过的你解决一时之需,即便是只能帮助到一个人,我的辛苦也就没有白费. 用EndNote向Word中直接插入参考文献能极大的提高论文写作的速度.在此以En ...

  7. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  8. Eclipse 工程目录下的.classpath、.project文件和.settings文件作用

    1..classpath 定义了你这个项目在编译时所使用的$CLASSPATH (注: 每次在更新jar的版本或者增加jar之后,请在SVN提交.classpath文件,否则工程的build path ...

  9. 博客维护停止,需要的伙伴们移步http://blog.csdn.net/panhouye

    两个博客的维护着实费心,方便大家共同学习.督促.进步.感兴趣的伙伴们移步CSDN博客:http://blog.csdn.net/panhouye,博客目录如下: 1.Android中通过实现线程更新P ...

  10. interface21 - web - Log4jConfigListener(Log4j加载流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...