cookie原理详解及单点登录原理

2023-11-09

cookie一般是用来客户端存储信息的。用它可以进行用户信息的检验,实际案例—单点登录。

cookie的原理

在这里插入图片描述

第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中(通过Set-Cookie字段),在浏览器第二次发请求的时候,会把cookie带过去,服务端会辨别用户身份,当然服务器也可以修改cookie内容

服务端操作cookie示例:(express WEB框架)

var path = require('path');
var express = require('express');
var cookieParser = require('cookie-parser'); // 处理cookie的中间件
var app = express();

// 使用 cookieParser 中间件;
app.use(cookieParser());

// 如果请求中的 cookie 存在 isFirst
// 否则,设置 cookie 字段 isFirst, 并设置过期时间为10秒
app.get('/', function(req, res) {
    if (req.cookies.isFirst) {
        res.send("再次欢迎访问");
        console.log(req.cookies)
    } else {
      //格式为res.cookie('key',value,{options})
        res.cookie('isFirst', 1, { maxAge: 60 * 1000});
        res.send("欢迎第一次访问");
    }
});

app.listen(3030, function() {
    console.log('express start on: ' + 3030)
});
name:代表cookie的名字的意思,一个域名下绑定的cookie,name不能相同,相同的name的值会被覆盖掉.
value:代表cookie的值。
domain:代表的是,cookie绑定的域名,如果没有设置,就会自动绑定到执行语句的当前域,还有值得注意的点,统一个域名下的二级域名也是不可以交换使用cookie的,比如,你设置www.baidu.com和image.baidu.com,依旧是不能公用的
path:指定 cookie 影响到的路径
expires: 现在已经被max-age属性所取代,max-age用秒来设置cookie的生存期。
maxAge:指定 cookie 什么时候过期
secure:当 secure 值为 true 时,在 HTTPS 中才有效;反之,cookie 在 HTTP 中是有效。
httpOnly:浏览器不允许脚本操作 document.cookie 去更改 cookie。设置为true可以避免被 xss 攻击拿到 cookie

客户端操作cookie示例(js):

推荐使用js-cookie库

cookie 的属性

读取所有可从此位置访问的Cookie

allCookies = document.cookie;  //使用该方法可以获取到所有的cookie 键值对

cookie 是以key = value 这样的键值对形式存在的。

写一个新cookie

document.cookie = newCookie;  // 使用该方法一次只能对一个cookie 进行生成和更新。

以下可选的cookie属性值可以跟在键值对后,用来具体化对cookie的设定/更新,使用分号以作分隔。

示例:

document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";

单点登录

是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有相互信任的应用系统。

前置知识:(注意cookie默认是不支持跨域的)

1.同源策略 限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,要求协议,端口和主机都相同。

2.HTTP 用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是无状态协议,所以服务器单从网络连接上无从知道客户身份。 那要如何才能识别客户端呢?给每个客户端颁发一个通行证,每次访问时都要求带上通行证,这样服务器就可以根据通行证识别客户了。最常见的方案就是 Cookie。

3.Cookie 是客户端保存用户信息的一种机制,保存在客户机硬盘上。可以由服务器响应报文Set-Cookie的首部字段信息或者客户端 document.cookie来设置,并随着每次请求发送到服务器。子域名可以获取父级域名 Cookie。

4.Session 其实是一个抽象概念,用于跟踪会话,识别多次 HTTP 请求来自同一个客户端。Cookie 只是通用性较好的一种实现方案,通常是设置一个名为 SessionID(名称可自定义,便于描述,本文均使用此名称)的 Cookie,每次请求时携带该 Cookie,后台服务即可依赖此 SessionID 值识别客户端。

单系统登录

直接使用JWT实现登录信息检验,在生成token的时候,可以将用户id添加进去,这样用户登录之后,每次的请求都带上这个token,那么每次请求都能识别用户。

多系统登录

在同域名cookie是共享的。

不同子域名登录时,可以设置父级域名,由于每个子域名是跟父级域名cookie共享的,每次去改变或者获取父级域名。这样也能间接实现子域名cookie共享。

完全不同域名,默认情况下,不同域名是无法直接共享 Cookie 的。

前端跨域带 Cookie,如果只是期望异步请求时获取当前用户的登录态,可以通过发送跨域请求到已经登录过的域名,并配置属性:(需要前后端都配置)

通过 前端配置ajax请求头’withCredentials’为true,以及后台配置(‘Access-Control-Allow-Origin’,‘IP端口’)和(‘Access-Control-Allow-Credentials’,true),注意:Access-Control-Allow-Origin不能配置为‘*’;

// 原生ajax
xhrFields: {
  withCredentials: true
}

// axios 
axios.defaults.withCredentials = true

欢迎关注我的微信公众号
搜索:前端优学。
or扫码:在这里插入图片描述

获取更多更好更有深度的前端学习好文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cookie原理详解及单点登录原理 的相关文章

  • 【Qt-15】Qt与C++数据类型之间的转换

    1 String与QString之间的转换 string2QString string out weight QString qstr qstr QString fromStdString out weight QString2String
  • 搞一个release版本的aar包

    最近在做一个aar包给第三方使用 由于是第一次做这个aar包 在所有的功能代码完成需要打包的时候发现 坑开始出现了 于是各种百度 开始吧 首先你需要创建一个Android项目 然后创建一个android的library 下一步 剩下的就看你

随机推荐

  • JavaWeb.MVC购物车(第一部分)

    前言 这一篇我会使用servlet EL JSTL 三层架构写一个简单的购物车项目 内容比较多 这只是第一部分 只有登陆 首页数据显示和商品添加到购物车的功能 还有一部分功能的代码我会写在下一篇博客里 感兴趣的朋友们可以看一看 也希望大家可
  • Blender2.9基础七:外部插件篇

    一 插件安装 1 安装插件 2 插件显示位置 二 材质贴图相关插件 1 GrabDoc 贴图烘培插件 GrabDoc可以运行一键式场景设置 然后开始建模 对形状进行建模后 甚至在建模阶段 你可以实时预览材质在视口中的外观 主要特点 实时材质
  • unity3D 脚本中按键或鼠标输入响应函数

    简单地总结一下 unity中脚本实现输入 键盘和鼠标 的响应事件函数 不够完善 以后碰到再慢慢添加 键盘输入 1 Input GetKey up 按住键盘上键 2 Input GetKey KeyCode UpArrow 按住键盘上键 Ke
  • JS实现将数组中某个属性值相同的元素,放在一起

    function sortArr arrList str var arr 大数组 t 临时属性值相同数组 临时的变量 tmp if arrList length gt 0 tmp arrList 0 str 将相同类别的对象添加到同一个数组
  • [从零开始学习FPGA编程-44]:视野篇 - 集成电路助力数字化时代高质量发展-1-集成电路芯片主要形态

    目录 前言背景 什么是集成电路 什么是数字化时代
  • 为什么小程序预览时必须打开‘调试工具vconsole’才能正常运行?

    这是因为没有为小程序配置域名导致的 预览或者使用小程序体验版的时候 小程序会自动校验你是否配置了合法的域名 如果没有配置 还是使用的ip地址 这样就会造成一个现象 在开发工具上以及真机调试时 都能正常运行 但预览就不行 但只要在预览时 打开
  • c++如何使用yaml来进行配置

    c 如何使用yaml来进行配置 yaml的基本语法可以参考这个博客 https www cnblogs com sddai p 9626392 html yaml的使用也可以参考这个博客 https www it610 com articl
  • 基础算法题——迷宫(递推)

    迷宫 题目链接 解题思路 暴力法 利用 dfs 遍历每一条可能的路径 将遍历的权值和不断取余 不足 当 n m 取较大的情况下 所遍历的路径可能会暴增 出现超时的情况 递推法 从题目上我们可以发现 最终的权值和是要对 mod 取余的 利用这
  • 查询SQLSERVER执行过的SQL记录(历史查询记录)

    有的时候 需要知道近段时间SQLSERVER执行了什么语句 可以用下面的方法 SELECT TOP 1000 QS creation time SUBSTRING ST text QS statement start offset 2 1
  • Linux教程系列 pdf下载(鸟哥私房菜等)

    鸟哥的Linux私房菜 基础篇 第四版 pdf 下载 LINUX内核设计与实现 pdf 下载 Linux 操作系统 基础操作 教学 doc 下载 linux内核深入剖析基于0 11 pdf 下载 Linux系统命令及其使用详解 doc 下载
  • 静态变量与动态变量的区别

    目录 一 定义 1 变量与常量 2 局部变量 局部变量 定义在函数中的变量 3 全局变量 4 动态变量和静态变量 二 区别 1 局部变量与全局变量的对比 2 静态变量与动态变量 一 定义 1 变量与常量 变量 指的是在程序运行过程中 可以通
  • Linux 高级进程管理

    1 让出处理器 Linux提供一个系统调用运行进程主动让出执行权 sched yield 进程运行的好好的 为什么需要这个函数呢 有一种情况是用户空间线程的锁定 如果一个线程试图取得另一个线程所持有的锁 则新的线程应该让出处理器知道该锁变为
  • 动态sql MyBatis处理多对一,一对多映射关系

    MyBatis处理模糊查询 1 用 符代替 接参 避免 占位符被解析成 在字符串中无法接参 select from user where username like name 2 使用sql语句中字符串拼接的函数 select from u
  • 微信小程序背景图片设置问题

    我们都知道 用css给网页设置背景图片 可以导入网络图片和本地图片 1 网络图片 元素定位 background image url https timgsa baidu com timg image quality 80 size b99
  • CUDA error: CUBLAS_STATUS_EXECUTION_FAILED when calling ‘cublasSgemm’

    运行transformer模型是报错如题 1 减小batch size 原因是调用cublas函数时会生成句柄 占用一定的内存 确保剩余内存够使用 2 gpu驱动版本和cuda torch版本的匹配问题 低版本的gpu驱动 尝试换成11 0
  • 怎么上传本地项目或文件到SVN服务器

    实验需要将本地的文件上传到SVN的doc文件夹下 在桌面右击 TortoiseSVN gt Repo brower gt 输入你的仓库的url gt 输入用户姓名和密码 即可访问到svn 右键点击Add File即可添加要上传的文件 如下图
  • c++文件输入与输出

    基于流的文件IO 头文件 ofstream 写文件 ifstream 读文件 fstream 读写文件 using namespace std 打开文件 std ifstream fin xxx txt std ifstream fin f
  • 几个更优雅、更高效 Pythonic 代码写法!

    本文分享几个鲜为人知的 Pythonic 技巧 这些技巧非常有用 但并不广为人知 通过学习和使用这些技巧 可以帮你节省时间和精力 并使你的代码更加优雅和高效 1 三元运算符 三元运算符是 if else 语句的简写 语法是value if
  • Flink自定义HBaseSink类

    文章目录 HBaseCell类 HBaseSink类 HBaseCell类 package com vic flink entity import lombok Data import java util HashMap Data publ
  • cookie原理详解及单点登录原理

    cookie一般是用来客户端存储信息的 用它可以进行用户信息的检验 实际案例 单点登录 cookie的原理 第一次访问网站的时候 浏览器发出请求 服务器响应请求后 会将cookie放入到响应请求中 通过Set Cookie字段 在浏览器第二