Web身份认证——【 Session认证 】

常用的认证机制之session认证和token认证 一、session认证 1、session认证的过程: 前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否存在,如果用户存在,则认证通过;认证成功后后端会生成session_id(后端会话当中的一个键,表中的一个key值),将session_id默认保存在会话表,当这条数据一旦记录完之后,会将session_key数据作为session_id放到响应头的set-cookie字段中; 浏览器接下来的操作为:将响应头中 阅读详情

Web身份认证——【 Session认证 】

1、Cookie回顾

​ 在上一篇博文中,我们学习了第一种认证方式Cookie认证,同时也实现了用户的登录认证功能,但是能在最后我们也了解到了Cookie认证的缺点,就是Cookie保存在客户端浏览器中,可能存在Cookie拦击、篡改、伪造的风险,所有不支持大家将一些隐私的数据存储。

2、提高身份认证的安全

​ 那么今天,我继续用商场收银员结账的例子来向大家讲解如何提高身份认证的安全性。

​ 那么为了防止客户伪造会员卡,收银员在拿到客户出示的会员卡之后,可以在收银机上进行刷卡认证,只要收银机确认存在的会员卡,才能被打折或正常使用。简单来说就是想要打折,先必须要有会员卡,同时收银机上也要存在该用户会员卡的信息才能打折。

在这里插入图片描述

​ 那么这种 “会员卡+刷卡认证” 双重认证的设计理念,就是Session认证机制的精髓所在。

3、session 认证

3.1 什么是session认证

​ session 是另一种记录用户登录状态的机制,不同点是 Cookie 保存在客户端浏览器中,而 session 保存在服务器中。

3.2 session 的用途

​ session 存储或者说运行在服务器端,当用户第一次访问服务器时,可以当客户的登录信息记录,当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截或者验证。

3.3 session 的工作流程

​ 当浏览器访问服务器,并发送第一次请求时,服务器端会创建一个session对象,并生成一个类似于{key:value}的键值对,将其记录或者保存在服务器的内存中,然后将key(键)返回到浏览器中,服务器自动保存Cookie。当浏览器下次再访问时,携带Cookie中的Key找到对应的session中的value,那么才算认证成功。

在这里插入图片描述

4、session在Node.js中的使用

4.1 安装 express-session 中间件

​ 在express项目中,只需要安装express-session中间件,即可在项目中使用session认证。

npm i express-session

4.2 配置express-sission中间件

​ express-session中间件安装成功之后,需要通过app.use()来注册或者说配置express-session中间件。

// 导入 express-session 模块
const session = require("express-session");
// 配置session中间件
app.use(session({
    secret:"Inlett",//服务器端生成的session签名
    resave:false,// 不强制保存session,即使它并没有变化
    saveUninitialized:true, // 强制将未初始的session存储
    name:"hellow", //返回给客户端的Cookie名称
    cookie:{ //设置返回给客户端的Cookie字符串的属性
        maxAge:90000 //有效时间90000ms,cookie和session一样都是
    }
}));

4.4 向session中存储数据

​ 当express-session中间件配置成功之后,即可通过req.session来访问和使用ssession对象,从而存储用户的基本信息。

app.post('/api/login', (req, res) => {
  // 判断用户提交的登录信息是否正确
  if (req.body.username !== 'admin' || req.body.password !== '000000') {
    return res.send({ status: 1, msg: '登录失败' })
  }
  // 向session对象中存储user(用户的信息)和islogin(用户的登录状态)属性
  req.session.user = req.body; // 用户的信息
  req.session.islogin = true; // 用户的登录状态

  res.send({ status: 0, msg: '登录成功' })
})

4.5 从 session 中获取数据

// 获取用户昵称的接口
app.get('/api/username', (req, res) => {
  // 如果session中存储的用户登录状态不为true或者为空
  if (!req.session.islogin) {
      // 那么先让其登录
     return res.send("请先登录!");
  }
  // 否则就是登录状态
  res.send(`<h1>欢迎${req.session.user}登录</h1>`);
})

4.6 清空 session 中的数据

​ 调用req.session.destroy()函数,即可清空服务器中保存的所有session 数据。

![session属性](E:\后端\node.js\笔记\images\session属性.png)// 退出登录的接口
app.post('/api/logout', (req, res) => {
  // 清空 Session 信息
  req.session.destroy()
  res.send({
    status: 0,
    msg: '退出登录成功',
  })
})

5、配置 session 的属性说明

在这里插入图片描述

6、用户登录案例

const fs = require("fs");
const path = require("path");
const express = require("express");
const app = express();
const router = express.Router();
const session = require("express-session");

// 配置session中间件
app.use(session({
    secret: "inLettxinxi", //用来对session id相关的cookie进行签名
    resave: false, // 是否每次都重新保存会话,建议false
    saveUninitialized: true, //// 是否自动保存未初始化的会话,建议false
    name: "nihao",
    cookie: {
        maxAge: 20000
    }
}));

app.use(express.urlencoded({ extended: false }));


router.get("/", (req, res) => {
    fs.readFile(path.join(__dirname, "../client/login.html"), "utf8", (err, data) => {
        res.send(data);
    });
});

// 用户第一次登录
router.post("/login", (req, res) => {
    // 判断用户提供的登录信息
    if (req.body.uid !== "10000" || req.body.pwd !== "admin") {
        return res.send("登录失败!");
    }
    req.session.user = req.body.uid;
    req.session.islogin = true;
    res.send("成功!");
});

// 当客户端再次访问的时候
router.get("/index", (req, res) => {
    console.log(!req.session.islogin);
    if (!req.session.islogin) {
        return res.send("请先登录!");
    }
    res.send(`<h1>欢迎${req.session.user}登录</h1>`);
});

router.post("/logout", (req, res) => {
    req.session.destroy();
    res.send({
        status: 0,
        msg: "退出登录成功!"
    });
});
app.use(router);

app.listen(8081, "192.168.124.15", () => {
    console.log("服务器开启成功!");
});

7、session 与 cookie 的区别

1、数据存放bai位置不同:

​ cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全程度不同:

​ cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

3、性能使用程度不同:

​ session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、数据存储大小不同:

​ 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

5、会话机制不同

​ session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。

器性能方面,应当使用cookie。

4、数据存储大小不同:

​ 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

5、会话机制不同

​ session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。

​ cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。

session身份认证机制 本博客讲述session身份认证机制,在了解session身份认证机制之前,需要先了解以下内容。前端身份认证主要分为两种,一种是Session身份认证,一种是JWT身份认证。(3)Session身份认证的工作原理(重要!(4)在Express中使用session认证。服务端渲染推荐使用session认证机制。前后端分离推荐使用JWT认证机制。Cookie在身份认证中的作用。Cookie不具有安全性。(1)HTTP无状态性。提高身份认证的安全性。 阅读详情

相关推荐

Web应用程序的身份验证:Session认证、Token认证

当用户进行登录操作时,服务器会创建一个Session,并给这个Session分配一个唯一的标识符(Session ID),然后将这个Session ID发送给客户端保存。例如,在电子商务网站中,用户需要登录才能访问个人购物车和订单等敏感信息,此时可以使用 session 来验证用户身份,并在服务器端存储相关的用户信息和状态。Token是无状态的,不需要在服务器端保存用户的登录信息,因此具有良好的可扩展性,并且可以很方便地实现分布式系统中的认证和授权。① session数据持久化,写入数据库或别的持久层。

Waylon_Ma的博客 4467

SQLAlchemy 中的会话(Session)缓存详解

一级缓存:会话缓存也被称为一级缓存。它自动存储在一个 SQLAlchemy Session 生命周期内加载的所有 ORM 对象。这意味着在会话期间,对同一个数据库实体的重复查询不会导致多次数据库请求。

ktianc的博客 2603

Web身份认证 --- Session和JWT Token

JWT,全称为JSON Web Token,是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。它本质上是一个经过数字签名的JSON对象,能够携带并传递状态信息(如用户身份验证、授权等)JWT由三部分组成, 并经过Base64Url编码之后使用 (注意编码不是加密)HeaderJWT 的头部通常由两部分组成,分别是令牌类型(typ)和加密算法(alg)。一般情况下,头部会采用 Base64 编码。Payload。

m0_74825135的博客 1285

Mybatis源码系列3-三种SqlSession的区别

DefaultSqlSession与SqlSessionManager 与SqlSessionTemplate 是我常见的3种sqlsesion,他们之间的区别是啥?

2017年 1388

Web身份认证全解析:从Session、JWT到SSO与安全实践

Web身份认证是解决HTTP无状态协议下用户身份识别问题的核心技术。其核心原理是通过凭证(如Session ID或Token)在客户端与服务器之间建立信任关系,使服务器能够识别请求的发起者。这项技术的价值在于保障用户数据安全、实现跨系统状态管理,并作为防御CSRF、XSS等攻击的基础防线。从经典的Session-Cookie机制到现代无状态的JWT(JSON Web Token),再到实现“一次登录,全网通行”的单点登录(SSO),认证方案随着前后端分离、微服务等架构演进不断升级。在实际应用中,开发者常需结

cmff98425的博客 416

Cookie与Session机制解析:Web身份认证的核心技术

HTTP协议的无状态特性催生了Cookie和Session这对关键技术组合。Cookie作为客户端存储机制,通过Set-Cookie响应头实现状态保持,其安全属性如HttpOnly和SameSite是防御XSS与CSRF攻击的基石。服务端Session则通过唯一标识符关联用户数据,支持分布式存储方案如Redis以提升性能。这对技术在电商登录、购物车等场景中发挥核心作用,通过合理设置Expires和Secure等参数保障安全性。现代Web开发中,需特别注意Chrome 80+的SameSite默认策略变更,以

weixin_28716443的博客 309

Python Web身份认证指南:JWT与Session的抉择

《Python Web身份认证指南:Session与JWT对比解析》 本文深入探讨了Web开发中两种主流身份认证方案的技术原理与实现。Session认证通过服务器端状态管理实现,采用Redis存储会话数据,提供Flask实现示例演示了完整的登录/登出流程。JWT作为无状态认证方案,则通过加密令牌实现跨域认证。文章通过时序图对比了两者的工作流程,并分析了各自的适用场景:Session适合传统Web应用,JWT更适用于分布式系统和API服务。技术选型需考虑项目规模、安全需求和服务架构等因素,文中的代码示例为开发

闲人编程的博客 1141

《web开发: (Node.js)身份认证 Session、JWT 》

一、前后端身份认证 1. Web 开发模式 目前主流的 Web 开发模式有两种,分别是: ① 基于服务端渲染的传统 Web 开发模式 ② 基于前后端分离的新型 Web 开发模式 2. 服务端渲染的 Web 开发模式 服务端渲染的概念:服务器发送给客户端的 HTML 页面,是在服务器通过字符串的拼接,动态生成的。因此,客户端不需要使用 Ajax 这样的技术额外请求页面的数据 服务端渲染的优缺点 优点: ① 前端耗时少。 因为服务器端负责动态生成 HTML 内容,浏览器只需要直接渲染页面即可。

yexiang优快云的专栏 1055

Web应用中用户身份认证(Session、Access Token/JWT)

文本将会讲述,在们web应用和服务端交互的过程中,用户身份认证相关的问题,你将会了解到`Session`方案和`Access Token`(`JWT`)的方案

你好 2306

PHP会话持久化与数据缓存策略

本文深入探讨了PHP中会话持久化和数据缓存的策略。首先介绍了Memcached的使用限制和数据库作为会话数据存储的解决方案。随后,讲解了如何在共享内存中存储任意数据,以便多个进程间共享,并且通过示例代码展示了如何操作。最后,文章探讨了如何通过汇总表来缓存计算结果,以实现对大数据集的高效查询。

weixin_35754676的博客 468

IC版图设计之OASIS文件格式详解

OASIS(Open Artwork System Interchange Standard)是继GDSII之后新一代的集成电路版图数据交换标准,由SEMI在2004年正式发布(SEMI标准号:SEMI P39)。高压缩率:相比GDSII可减少3-10倍文件体积扩展性强:支持纳米级工艺的复杂图形描述跨平台兼容:独立于EDA工具和操作系统安全增强:内置校验和与加密支持。

ZZcppc的博客 2448

Node.js【前后端的身份认证(Web 开发模式、身份认证、Session 认证机制、在 Express 中使用 Session 认证、JWT 认证机制、在 Express 中使用 JWT)】

Node.js【前后端的身份认证(Web 开发模式、身份认证、Session 认证机制、在 Express 中使用 Session 认证、JWT 认证机制、在 Express 中使用 JWT)】

m0_52896752的博客 302

ESP32-S3双屏AI吊坠:微型边缘智能终端设计实践

边缘智能终端是指在设备端完成数据感知、处理与响应的嵌入式系统,其核心在于低延迟、高隐私与弱网适应性。基于ESP32-S3等轻量级主控,通过语音唤醒、本地AI推理与双屏异步渲染等关键技术,可构建资源受限场景下的实用化人机交互节点。这类设计显著降低对云端依赖,提升实时性与数据安全性,广泛应用于智能穿戴、IoT交互面板及便携式语音设备。本文以‘璀璨·AI吊坠’为实例,深入解析双面圆形屏驱动、ES8311音频链路优化、VAD+Porcupine本地语音流水线,以及亚微安级低功耗状态机实现,为微型AI终端的软硬协同开

weixin_42348783的博客 635

Web开发身份认证方案:Session vs JWT

Session vs JWT:工作原理、优缺点、适用场景

xike1024的博客 1169

Spring Boot 调用豆包大模型如何开启联网搜索?

场景推荐方案有权限创建 Bot + 需强集成✅ 使用bot-xxxx无 Bot 权限 / 追求通用性✅ 自行集成搜索引擎 + 普通豆包模型仅需基础对话❌ 无需考虑联网豆包大模型确实支持联网搜索,但前提是:你用的是“智能体 Bot”,且它被配置了“网页搜索”插件,并调用正确的 API 端点。希望本文能帮你少走弯路,快速构建出真正“知天下事”的智能助手!

lpfasd123的博客 1124

【git】win 10 / win 11:git 首次拉取云效平台代码详细教程

git 首次拉取云效平台代码详细教程:Git 生成 SSH 公钥、云效工作台添加 SSH 公钥、git 使用 SSH / HTTP 链接拉取云效代码

顾三殇 —— 博客空间(软件测试) 4218

Cookie、Session、Token 之Web身份认证技术的演进

本文系统梳理了Web应用状态管理技术的演进历程。最初通过Cookie解决HTTP无状态问题,但存在安全隐患;继而发展为Session方案,将敏感数据存储在服务端,使用SessionID进行验证,但面临服务器内存压力与分布式扩展难题;最终演进为Token(如JWT)方案,通过签名令牌实现去中心化验证,完美适应分布式架构和跨域场景,但牺牲了即时失效能力。三种方案各具特点:Cookie实现简单但不安全,Session安全可靠但不便扩展,Token扩展性强但无法主动注销。技术选择需根据应用规模、架构特点等实际需求进

AI全栈 和 IT 编程相关分享 708

Unitree G1仿人机器人协同搬箱:从仿真搭建到多机协同部署完整指南

Unitree G1仿人机器人协同搬箱技术方案摘要 本文提供了一套完整的Unitree G1人形机器人协同搬箱解决方案,涵盖从仿真环境搭建到多机协同部署的全流程。核心内容包括: 双仿真环境配置:同时搭建Gazebo+ROS Noetic基础仿真环境与Isaac Gym+Mujoco高性能RL训练环境,支持Sim2Sim迁移验证 训练框架搭建:详细配置unitree_rl_gym框架,提供PPO算法定制化训练流程和参数优化方案 数据集应用:整合宇树开源真机数据集(UnifoLM-WBT-Dataset)~~~

huanghm88的专栏 472

Cookie 和 Session:Web 开发中的身份认证与状态保持

Cookie 和 Session 是 Web 开发中重要的状态保持机制。Cookie 存储在客户端,适用于存储少量非敏感数据;Session 存储在服务器端,适用于存储大量敏感数据。在实际应用中,应根据具体的需求选择合适的方案,并注意安全性问题。希望这篇文章能够帮助你更好地理解 Cookie 和 Session 的概念和工作原理。如有任何疑问,欢迎留言讨论。

q68686的博客 1073

【RTD】AD7793两线式铂电阻PT100/PT1000应用

两线式RTD是低成本的检测方案,适用于检测精度不高、导线长度较短的场合。

只要思想不滑坡,想法总比问题多。 4258

高数15种常见特殊曲线:星形线、心形线、摆线、对数螺线、双曲螺线、阿基米德螺线、伯努利双纽线、三叶玫瑰线、四叶玫瑰线、六叶玫瑰线、三次抛物线、半立方抛物线、箕舌线、蔓叶线、笛卡儿叶形线、概率曲线

4.1 对数螺线(等角螺线、生长螺线)三叶玫瑰线、四叶玫瑰线、六叶玫瑰线。​7.2 半立方抛物线(尼尔曲线)10.笛卡儿叶形线(茉莉花瓣曲线)常考选择题、填空题,大题也涉及。​4.2 双曲螺线(倒数螺线)11.阿基米德螺线(等速螺线)3.摆线(圆滚线、旋轮线)5.双纽线(伯努利双纽线)1.星形线(四尖瓣线)2.心形线(心脏线)..................

刘鑫磊 1万+

Cookie、Session、Token与JWT:Web身份认证选型实战指南

Web身份认证是现代应用安全的基石,其核心在于如何在无状态HTTP协议上可靠标识并验证用户身份。从基于浏览器原生机制的Cookie,到服务端维护状态的Session,再到客户端自包含的Token与标准化实现JWT,每种方案都对应不同的设计哲学与工程约束。Cookie作为HTTP标准头字段,承担凭证传递职责但受制于大小与安全策略;Session将状态托管于服务端,保障强管控却带来扩展瓶颈;Token尤其是JWT通过数字签名实现无状态验证,兼顾性能与分布式友好性。实际选型需综合用户规模、安全等级、终端类型及运维

weixin_30443075的博客 443

WPF数据绑定Binding对数据的转换与效验(四)

Binding的作用就是架在Source与Target之间的桥梁,数据可以在这座桥梁的帮助下来流通。就像现实世界中的桥梁会设置一些关卡进行安检一样,Binding这座桥上也可以设置关卡对数据的有效性进行检验,不仅如此,当Binding的两端要求使用不同的数据类型时,我们还可以为数据设置转换器。Binding用于数据有效性检验的关卡是它的ValidationRules属性,用于数据类型转换的关卡是它的Converter属性。

qq_30725967的博客 1630

Cookie、Session与Token:Web身份认证核心技术解析

HTTP协议的无状态特性催生了Cookie、Session和Token三种身份认证技术。Cookie通过客户端存储实现基础会话跟踪,Session在服务端维护会话状态,而Token则以去中心化方式实现跨系统认证。在Web安全领域,这些技术需要配合HttpOnly、SameSite等属性防御XSS/CSRF攻击。现代应用常组合使用这些方案,如SPA采用JWT+Refresh Token,传统Web使用Session+Cookie。理解Cookie的Domain作用域、Session的集群同步、Token的签名

526

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Web身份认证的和以下几种方式及其相互之间的联系是什么: a.Basic身份认证 b.Session与Cookie以及Session ID c.Json Web Token

文心一言

cream_t_g的博客 528

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Web系统设计 --- 身份认证之Session

为什么需要Session?我们都知道浏览器是没有状态的(HTTP 协议无状态),这意味着浏览器并不知道是张三还是李四在和服务端打交道。这个时候就需要有一个机制来告诉服务端,本次操作用户是否登录,是哪个用户在执行的操作,以及这个用户的相关信息。所以有两种办法来解决这个问题一种是将用户信息存储在本地浏览器中 (如cookie或者local storage),每次请求HTTP时,将信息一起发出去。

HelloWorld 436

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: Web身份认证——【 Cookie认证 】
下一篇: Web身份认证——【 JWT 认证】
御弟謌謌
博客等级 码龄7年 192粉丝 168原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值