一、何为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. electron 使用 node-ffi 调用 C++ 动态链接库(DLL)

    一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...

  2. 【金三银四跳槽季】Java工程师如何在1个月内做好面试准备?

    目录 一.写在前面 二.技术广度的快速准备 三.技术深度的快速准备 四.基础功底的快速准备 五.下篇预告 一.写在前面 春节长假转眼已过,即将迎来的是一年一度的金三银四跳槽季. 假如你准备在金三银四跳 ...

  3. Fiddler怎样抓取手机的包

    Fiddler作为代理服务器,可以拦截到手机发出的请求,再经过Fiddler发送到服务器,获取到服务器响应的数据,这个过程,只要设置配置好了,使用过程不受影响. 要想抓取到手机的包,先要给手机设置一个 ...

  4. [EXP]McAfee ePO 5.9.1 - Registered Executable Local Access Bypass

    # Exploit Title: McAfee ePO 5.9.1 Registered Executable Local Access Bypass # Date: 2019-03-07 # Exp ...

  5. epel安装第三方扩展源后,运行yum报错的解决方案

    yum安装报错:Cannot retrieve metalink for repository: epel. Please verify its path and try again 解决方法: 一句 ...

  6. Visual Studio For MacOS 踩坑记(二)

    Visual Studio For MacOS安装安卓SDK. 系统默认安装了安卓6.0  API23的SDK.  但是我需要安卓7.0的,API24.  遂安装. SDK可以下载成功,但是用Visu ...

  7. SpringBoot集成Redis

    1.引入 spring-boot-starter-redis <dependency> <groupId>redis.clients</groupId> <a ...

  8. Webservice和EJB的区别

    1. WebService可以说是跨平台的,因为它采用的是XML技术,说穿了就是把你的请求按照该WebServece的标准将参数传过去,然后服务器返回结果,当然了最重要的是参数的传递和结果的返回都是采 ...

  9. Lombok(1.14.8)的简单示例

    分享自: http://blog.csdn.net/huey2672/article/details/42240985 Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长,尤其 ...

  10. IIS 6 配置

    首先想IIS添加asp.net v4.0的应用池.使用管理员身份在cmd窗口输入如下命令 %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regi ...