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 相关操作
- 设置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');
})
- 获取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('登录 注册')}
})
- 销毁session
// 销毁session
router.get('/del-session', (req, res) => {req.session.destroy(() => {res.send('销毁session')})
})
4. cookie 和session 的区别
cookie和session的区别主要有如下几点:
- 存在的位置
- cookie: 浏览器端
- session: 服务端
- 安全性
- cookie是以明文的方式存放在客户端的,安全性相对较低
- session存放于服务器中,所以安全性
相对较好
- 网络传输量
- cookie设置内容过多会增大报文体积,会影响传输效率
- session数据存储在服务器,只是通过cookie 传递id,所以不影响传输效率
- 存储限制
- 刘览器限制单个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的朋友 操作源数据位置:【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置:【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…...
Shell脚本——批量清理Kubernetes集群中Evicted状态的pod
测试环境有一台宿主机出现了异常,大量的异常日志导致宿主机的磁盘使用率超过了85%,触发了上面的pod驱离策略,该宿主机上的的pod处于Evicted状态。在清理了磁盘之后,得手动处理掉这些Evicted状态的pod。 #!/bin/bash# 获取当前状态…...
(深度估计学习)Win11复现DepthFM
目录 1. 系统配置2. 拉取代码,配置环境3.开始深度预测4.运行结果 论文链接:https://depthfm.github.io/ 讲解链接:https://www.php.cn/faq/734404.html 1. 系统配置 本人系统:Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…...
cocos creator 帧率60 不生效meta50 能刷新到90
环境: cocos creator 2.4.3 华为meta 50 背景: 小游戏 需要在update 里取帧率 发现跟时间对不上 游戏设置60帧 手机上显示 90帧 cc.game.setFrameRate(30) 显示 30帧 cc.game.setFrameRate(60) 显示 90帧 结论: 对于老版本的cocos creator …...
探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction
(1)在 STL 库源码中这俩模板经常出现,用来给源码编译中的条件选择,模板的版本选择等提供依据。先给出其定义: 以及: 可以得出结论: conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…...
【核弹】我的第一款IDEA插件
SuperHotSwap 插件名称叫做:SuperHotSwap(超级热更新) 开发初心:旨在做出一款最便捷的IDEA热更新插件,减少用户操作步骤,提供零配置的可视化操作更新。 为什么要写这个插件: 每次改一下Mappe…...
【工作篇】软件工程师的知识基础(持续更新)
目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口,用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构,用于实现各种系统级的操作,如文件操作、进程…...
知识付费系统开源方案,教育机构如何利用朋友圈做转介绍?
招生成本高,效果差让许多教育机构头疼不已。对于教育机构来说通过转介绍招生是一个非常有效的途径,那么教育机构如何利用朋友圈做转介绍呢?今天小编就来和大家分享一下。 利用朋友圈做转介绍,主要是通过做活动,来完成增加粉丝、扩…...
c++20 std::reinterpret_cast、std::bit_cast、std::static_cast
std::reinterpret_cast 类型不相关的转换,不安全例如转为&,不支持,要求sizeof相同: uint32_t n32 12345678;//0x00bc614e uint32_t* ptr reinterpret_cast<uint32_t*>(n32);//0x00bc614e uint32_t& ref reinter…...
PHP单独项目启动演示
文章目录 phpstudy得到文件打开phpStudy.exe运行项目 Apache运行后又自动停止 phpstudy 得到文件 一般我们会得到这么一个项目文件,如果外层有“中文路径”,请剪切此内容作为项目根目录即可 打开phpStudy.exe 因为我又正常的编程环境和mysql&#x…...
vscode 通过ssh 远程执行ipynb +可以切换conda env
主要是保证几个点 远程服务器python 环境没问题 conda这些也都有的ssh的账户 是有conda权限的没有免密就输入密码 免密教程就是最基本的那种 公钥copy过去就行了vscode 那几个插件都要装好 开始操作 首先 vscode 点击左侧工具栏中的扩展,搜索“ssh”,…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
