当前位置: 首页 > news >正文

Node.js -- 会话控制

文章目录

  • 1. 会话介绍
  • 2. cookie 相关操作
    • 2.1 cookie 设置
    • 2.2 删除 cookie
    • 2.3 获取cookie
  • 3. session 相关操作
  • 4. cookie 和session 的区别
  • 5. 补充知识 -- CSRF跨站请求伪造
  • 6. token

1. 会话介绍

所谓会话控制就是对会话进行控制
HTTP是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端,无法区分用户
而产品中又大量存在的这样的需求,所以我们需要通过会话控制来解决该问题
常见的会话控制技术有三种:

  • cookie
  • session
  • token

2. cookie 相关操作

2.1 cookie 设置

const express = require('express')const router = express()router.get('/set-cookie', (req, res) => { res.cookie('name', 'qingtian')res.send('success')
})router.listen(3000,() => {console.log('go');
})

这种创建路由规则的方式,在浏览器全部窗口关闭之后就不会再出现cookie 值;

七天之内免登录效果:

        res.cookie('name','lisi',{maxAge:30*1000})// maxAge 单位为ms

这种创建路由规则的方式在达到maxAge 时cookie 值才会消失。

2.2 删除 cookie

// 删除cookie 
router.get('/del-cookie', (req, res) => {res.clearCookie('name')res.send('删除成功')
})

2.3 获取cookie

// 获取cookie
router.get('/get-cookie', (req, res) => {console.log(req.cookies);res.send('获取成功')
})

3. session 相关操作

  1. 设置session
const express = require('express')
const session = require('express-session')
const MongoStore = require('connect-mongo')const router = express()router.use(session({name: 'sid',secret: 'atguigu',// 参与加密的字符串 也叫做加盐 、签名saveUninitialized: false,// 是否为每次请求都设置一个cookie用来存储session的idresave: true, //是否在每次请求时重新保存sessionstore: MongoStore.create({mongoUrl: 'mongodb://127.0.0.1:27017/test' //数据库的连接配置}),cookie: {httpOnly: true, // 开启后前端无法通过 JS 操作maxAge: 1000 * 300 // 这一条 是控制 sessionID 的过期时间的!!!},
}))// 设置session
router.get('/set-session', (req, res) => {req.session.username = 'wangwu'res.send('设置session')
})router.listen(3000, () => {console.log('go');
})
  1. 获取session
// 获取session
router.get('/get-session', (req, res) => {console.log(req.session.username);if (req.session.username) {res.send(`你好${req.session.username}`)} else {res.send('登录 注册')}
})
  1. 销毁session
// 销毁session
router.get('/del-session', (req, res) => {req.session.destroy(() => {res.send('销毁session')})
})

4. cookie 和session 的区别

cookie和session的区别主要有如下几点:

  1. 存在的位置
  • cookie: 浏览器端
  • session: 服务端
  1. 安全性
  • cookie是以明文的方式存放在客户端的,安全性相对较低
  • session存放于服务器中,所以安全性相对较好
  1. 网络传输量
  • cookie设置内容过多会增大报文体积,会影响传输效率
  • session数据存储在服务器,只是通过cookie 传递id,所以不影响传输效率
  1. 存储限制
  • 刘览器限制单个cookis保存的数据不能超过4K,且单个域名下的存储数量也有限制
  • session数据存储在服务器中,所以没有这些限制

5. 补充知识 – CSRF跨站请求伪造

现有A,B两个网站,如果B网站发送了一个A网站内部的请求(比如退出登陆操作),那么就出现了CSRF跨站请求伪造;此时对A网站造成了影响,这是我们可以将退出登录的get 请求改为post 请求

6. token

JWT(JSON Web Token)是目前最流行的跨域认证解决方案,可用于基于token的身份验证
JWT使token的生成与校验更规范
我们可以使用jsonwebtoken 包来操作token

const jwt = require('jsonwebtoken')// 生成token
let token = jwt.sign({username:'zhangsan'
}, 'atguigu', {expiresIn:60,// 单位为s
})console.log(token);// 校验token
let t = jwt.verify(token, 'atguigu', (err, data) => {if (err) {console.log('校验失败');}console.log(data);
})

相关文章:

Node.js -- 会话控制

文章目录 1. 会话介绍2. cookie 相关操作2.1 cookie 设置2.2 删除 cookie2.3 获取cookie 3. session 相关操作4. cookie 和session 的区别5. 补充知识 -- CSRF跨站请求伪造6. token 1. 会话介绍 所谓会话控制就是对会话进行控制 HTTP是一种无状态的协议,它没有办法…...

做抖店不能踩的几个坑,新手要照做,老玩家要听劝~

我是王路飞。 很多人都说抖店的运营很简单,选选品、对接一下达人,就可以坐等店铺出单了。 这话骗骗还没开店的小白也就得了,但凡做抖店超过一个月的,都不会相信这句话。 细心耐心是做抖店最基本的态度。 拿到一个好结果的前提…...

【Kibana】快速上手Kibana平台(KQL)

文章目录 快速使用Kibana平台常用查询语句KQL基本查询覆合查询模糊查询 目前市面上大部分的公司的日志系统都是使用ELK系统,因此我们进行工作必须得掌握Kibana平台的基本使用,这里主要说明怎么“快速使用Kibana平台”以及记录一些常用的“KQL语言”。 快…...

全方位入门git-慕课网 笔记

目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时,如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…...

使用 Docker 部署 TaleBook 私人书籍管理系统

1)项目介绍 GitHub:https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建,具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…...

分布式系统的一致性与共识算法(一)

前言 etcd是线性一致性读,而zk却是顺序一致性读,再加上各种共识、强弱一致的名词,看到欸度时候总会混淆,这里会给出一些例子来帮助理解。 什么是一致性? 在谈到一致性这个词时,你会想到CAP理论的consist…...

创建一个Spring Boot项目

文章目录 一、如何创建一个Spring Boot项目1.1 项目创建:专业版 or 社区版 or 网站创建1.2 数据配置1.3 项目启动1.4 代码编写 二、Spring Boot 项目文件介绍三、Web服务器四、根据HTTP状态码解决bug4.1 4044.2 500 五、Spring VS Spring Boot VS Spring Web MVC5.1…...

ansible -playbook运维工具、语法、数据结构、命令用法、触发器、角色

目录 配置文件 基本语法规则: YAML支持的数据结构 playbook核心元素 ansible-playbook用法: 触发器 特点: 角色: 习题: 配置文件 playbook配置文件使用yaml语法,YAML 是一门标记性语言,专门用来写配…...

web前端之sass中的颜色函数、active按钮激活、hover鼠标悬浮、disabled禁用、scss循环、css

MENU 效果图htmlsassscss编译后的css页面css 效果图 注意查看蓝色按钮。 html <div class"box"><button class"btn type_1">按钮</button><button class"btn type_2">按钮</button><button class"btn ty…...

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置&#xff1a;【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置&#xff1a;【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…...

Shell脚本——批量清理Kubernetes集群中Evicted状态的pod

测试环境有一台宿主机出现了异常&#xff0c;大量的异常日志导致宿主机的磁盘使用率超过了85%&#xff0c;触发了上面的pod驱离策略&#xff0c;该宿主机上的的pod处于Evicted状态。在清理了磁盘之后&#xff0c;得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…...

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码&#xff0c;配置环境3.开始深度预测4.运行结果 论文链接&#xff1a;https://depthfm.github.io/ 讲解链接&#xff1a;https://www.php.cn/faq/734404.html 1. 系统配置 本人系统&#xff1a;Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…...

cocos creator 帧率60 不生效meta50 能刷新到90

环境&#xff1a; cocos creator 2.4.3 华为meta 50 背景&#xff1a; 小游戏 需要在update 里取帧率 发现跟时间对不上 游戏设置60帧 手机上显示 90帧 cc.game.setFrameRate(30) 显示 30帧 cc.game.setFrameRate(60) 显示 90帧 结论&#xff1a; 对于老版本的cocos creator …...

探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction

&#xff08;1&#xff09;在 STL 库源码中这俩模板经常出现&#xff0c;用来给源码编译中的条件选择&#xff0c;模板的版本选择等提供依据。先给出其定义&#xff1a; 以及&#xff1a; 可以得出结论&#xff1a; conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…...

【核弹】我的第一款IDEA插件

SuperHotSwap 插件名称叫做&#xff1a;SuperHotSwap&#xff08;超级热更新&#xff09; 开发初心&#xff1a;旨在做出一款最便捷的IDEA热更新插件&#xff0c;减少用户操作步骤&#xff0c;提供零配置的可视化操作更新。 为什么要写这个插件&#xff1a; 每次改一下Mappe…...

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口&#xff0c;用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构&#xff0c;用于实现各种系统级的操作&#xff0c;如文件操作、进程…...

知识付费系统开源方案,教育机构如何利用朋友圈做转介绍?

招生成本高&#xff0c;效果差让许多教育机构头疼不已。对于教育机构来说通过转介绍招生是一个非常有效的途径&#xff0c;那么教育机构如何利用朋友圈做转介绍呢?今天小编就来和大家分享一下。 利用朋友圈做转介绍&#xff0c;主要是通过做活动&#xff0c;来完成增加粉丝、扩…...

c++20 std::reinterpret_cast、std::bit_cast、std::static_cast

std::reinterpret_cast 类型不相关的转换&#xff0c;不安全例如转为&&#xff0c;不支持&#xff0c;要求sizeof相同&#xff1a; uint32_t n32 12345678;//0x00bc614e uint32_t* ptr reinterpret_cast<uint32_t*>(n32);//0x00bc614e uint32_t& ref reinter…...

PHP单独项目启动演示

文章目录 phpstudy得到文件打开phpStudy.exe运行项目 Apache运行后又自动停止 phpstudy 得到文件 一般我们会得到这么一个项目文件&#xff0c;如果外层有“中文路径”&#xff0c;请剪切此内容作为项目根目录即可 打开phpStudy.exe 因为我又正常的编程环境和mysql&#x…...

vscode 通过ssh 远程执行ipynb +可以切换conda env

主要是保证几个点 远程服务器python 环境没问题 conda这些也都有的ssh的账户 是有conda权限的没有免密就输入密码 免密教程就是最基本的那种 公钥copy过去就行了vscode 那几个插件都要装好 开始操作 首先 vscode 点击左侧工具栏中的扩展&#xff0c;搜索“ssh”&#xff0c;…...

OpenClaw效率对比:人工vsQwen2.5-VL-7B处理100张图片耗时测试

OpenClaw效率对比&#xff1a;人工vsQwen2.5-VL-7B处理100张图片耗时测试 1. 测试背景与动机 最近在整理个人摄影作品集时&#xff0c;我遇到了一个典型问题&#xff1a;需要将100张混合了风景、人像、静物的照片按主题分类归档。手动操作不仅耗时&#xff0c;还容易因视觉疲…...

向量数据库:大模型的高效外存

一、 向量数据库概述&#xff1a;AI大模型的“外部记忆体” 向量数据库是一种专门用于存储、索引和查询**向量嵌入&#xff08;Vector Embedding&#xff09;**的数据库系统。在大模型时代&#xff0c;它扮演着至关重要的“外部记忆体”角色&#xff0c;其核心价值在于解决大模…...

douyin-downloader:从素材焦虑到创作自由的抖音内容获取方案

douyin-downloader&#xff1a;从素材焦虑到创作自由的抖音内容获取方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

Linunx常用命令

一. 通用1.1系统单元启动# 创建系统用户&#xff0c;不允许登录&#xff0c;不创建 home 目录 sudo useradd -r -s /sbin/nologin xxl-job#将 /data/middleware/xxl-job 目录的归属权改为 xxl-job 用户&#xff1a; sudo chown -R xxl-job:xxl-job /data/middleware/xxl-job#检…...

intv_ai_mk11零基础上手:不装软件、不写代码、不开终端,纯浏览器操作

intv_ai_mk11零基础上手&#xff1a;不装软件、不写代码、不开终端&#xff0c;纯浏览器操作 1. 为什么选择intv_ai_mk11 想象一下&#xff0c;你正在准备一份重要报告&#xff0c;突然需要一段专业的内容摘要&#xff1b;或者你在写营销文案时卡壳了&#xff0c;需要一些创意…...

MongoDB中大型文本字段怎么存_GridFS切分与外部存储对比

会。MongoDB单文档上限16MB&#xff0c;但超2MB字符串易致客户端OOM或超时&#xff1b;GridFS非自动魔法&#xff0c;需手动管理分块、拼接与清理&#xff1b;大文本应优先存OSS/S3&#xff0c;Mongo仅存元数据。大文本存MongoDB会撑爆内存吗&#xff1f;会。MongoDB单文档上限…...

避开高速接口时序坑:用IDELAY2和ODDR实战优化FPGA的input delay约束

高速接口时序优化实战&#xff1a;IDELAY2与ODDR的精细控制艺术 当FPGA设计遭遇GHz级高速接口时&#xff0c;传统的时序约束方法往往捉襟见肘。我曾在一个25Gbps背板项目中发现&#xff0c;即使精确计算了input delay约束&#xff0c;时序报告仍显示关键路径存在0.3ns的违例—…...

GLM-4-9B-Chat-1M保姆级教程:Windows WSL2环境下CUDA+PyTorch+vLLM全栈部署

GLM-4-9B-Chat-1M保姆级教程&#xff1a;Windows WSL2环境下CUDAPyTorchvLLM全栈部署 1. 开篇&#xff1a;为什么选择这个超长文本模型&#xff1f; 如果你正在找一个能在单张显卡上运行&#xff0c;却能处理超长文档的AI模型&#xff0c;GLM-4-9B-Chat-1M可能就是你要的答案…...

暗黑破坏神2存档编辑器:5分钟解决20年存档管理难题的终极免费方案

暗黑破坏神2存档编辑器&#xff1a;5分钟解决20年存档管理难题的终极免费方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在《暗黑破坏神2》中花费数百小时培养角色&#xff0c;却因存档损坏而前功尽弃&#xff1f;…...

Python对象生命周期管理失效了?——从引用计数到分代GC的隐性成本陷阱(附内存热力图诊断工具)

第一章&#xff1a;Python对象生命周期管理失效的典型现象与诊断范式Python 的自动内存管理依赖引用计数、循环垃圾收集器&#xff08;GC&#xff09;与弱引用机制协同工作&#xff0c;但当这些机制被意外绕过或干扰时&#xff0c;对象生命周期便可能失控。典型失效现象包括&am…...