一、何为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. Java正则表达式API详解

    1. Pattern类 public class PatternExample { /** * public static String quote(String s) * 返回指定字符串的字面值模式 ...

  2. InnoDB体系架构(二)内存

    InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread. ...

  3. node.js使用redis储存session(详细步骤)

    转储session的原因 网上有许多session需要用数据库储存的原因,对我来说原因很简单,仅仅只是node的生产环境不允许将session存到服务器的内存中.会报一个内存溢出的风险警告.所以我决定 ...

  4. 利用SSH反向隧道,连接内网服务器

    前言 公司有一台文件服务器(内部使用,无外网IP),上面主要安装了SVN服务,用来存储和共享各部门的文档,因为都是内网,直接远程(mstsc)上去就可以方便维护,但最近公司租了新的办公室,部分员工被分 ...

  5. Centos6.5安装Python2.7.9

    1. 问题背景 Centos6.5默认自带的python环境是2.6.6,python的一些特性没法使用,所以要对python进行升级,借鉴了网上其他同学的安装教程,但是还是遇到一些坑,不是那木顺利, ...

  6. 3-2 模板语法(vue中的内容写法)

    插值表达式.v-text.v-html的用法

  7. Jenkins系列之三——centos7.4+GitLab+Jenkins部署

    GitLab介绍 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 系统环境准备 建议:内存4G以上不然带不动 [root@hejianl ...

  8. sql server 备份与恢复系列七 页面还原

    一.概述 当数据库发生损坏,数据库的每个文件都能打开,只是其中的一些页面坏了,这种情况可以借助DBCC CHECKDB进行数据库检查修复.如果要保证数据库不丢失,或修复不好,管理员只能做数据库完整恢复 ...

  9. mysql 开发进阶篇系列 23 应用层优化与查询缓存

    一.概述 前面章节介绍了很多数据库的优化措施,但在实际生产环境中,由于数据库服务器本身的性能局限,就必须要对前台的应用来进行优化,使得前台访问数据库的压力能够减到最小. 1. 使用连接池 对于访问数据 ...

  10. ​​ ​​我的Java秋招面经大合集(包含BAT头条网易等公司)

    ​ 微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经 ...