session认证

news2025/1/11 10:13:51

目录

前言

http协议的无状态性

session的工作原理

在express中使用session认证

在session中存数据

在session中取数据

清空session

结尾


前言

session是一种记录客户状态的机制,客户端浏览器法访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session

http协议的无状态性

服务器不会主动保留每次http请求的状态

session的工作原理

当浏览器向服务器提交账号和密码时,服务器开始验证账号密码。登录成功后的用户信息存储在服务器的内存中,生成对应的cookie字符串,然后服务器响应将生成的cookie发送给客户端浏览器。浏览器自动把cookie存储在当前的域名下。当浏览器再次发起请求时,会将当前域名下的所有可用的cookie发送给服务器。服务器根据请求头中携带的cookie从内存中查找对应信息,身份认证成功,针对当前用户生成特定的响应内容,将对应的页面内容响应给浏览器

在express中使用session认证

安装

npm i express-session

配置中间件

app.use(session({
    secret:'keyboard cat',
    resave:'false',
    saveUninitialized:true
}))
在session中存数据
app.use('/post',(req,res)=>{
    if(req.body.username !=='admin'|| req.body.password !=='000000'){
        return res.send({ status: 1, msg: '登录失败' })
    }
    req.session.user = req.body
    req.session.islogin = true
    res.send({ status: 0, msg: '登录成功' })
})

在这里我们指定账号和密码,使用req.session.user=req.body将用户信息存储到session中,使用req.session.islogin=true来将用户登录状态存储到session中(注意,必须导入了express-session才能调用req.session,且req.body需要使用中间件来解析post提交的表单数据

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

完整的post请求代码

const express = require('express')

const app = express()
// 导入
const session = require('express-session')

// 配置中间件
app.use(session({
    secret:'keyboard cat',
    resave:'false',
    saveUninitialized:true
}))
// 解析post提交的表单数据
app.use(express.urlencoded({extended:false}))

// post请求
app.use('/post',(req,res)=>{
    if(req.body.username !=='admin'|| req.body.password !=='000000'){
        return res.send({ status: 1, msg: '登录失败' })
    }
    req.session.user = req.body
    req.session.islogin = true
    res.send({ status: 0, msg: '登录成功' })
})

app.listen(80,() => {
    console.log('server running the localhost http://127.0.0.1')
})

这里我们使用postman模拟发起请求,当账户密码输入正确时

账号密码输入错误时

由此得出代码正确,可以正确在session中存数据

在session中取数据

获取用户名

// get请求获取用户名接口
app.use('/get',(req,res)=> {
    if(!req.session.islogin){
        return res.send({ status: 1,msg:'fail'})
    }
    res.send({
        status:0,
        msg:'success',
        username:req.session.user.username
    })
})

使用postman模拟get请求

成功获取到了登录时的用户名

清空session

这里调用req.session.destroy()清空session

 req.session.destroy()

完整退出登录代码

// 退出登录接口
app.use('/logout',(req,res)=> {
    req.session.destroy()
    res.send({
        status:0,
        msg:'退出登陆成功'
    })
})

使用postman模拟调用退出登录api接口

由图看出已经成功退出了登录状态,并且清空了session

结尾

由此session认证就介绍完了,而session认证最大的问题就是有跨域问题,想实现跨域需要很麻烦的配置,所以存在跨域问题时,不建议使用session,推荐使用JWT(jsonwebtoken)。下篇文章将会介绍JWT认证。感谢观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于闪电连接过程优化的BP神经网络(分类应用) - 附代码

基于闪电连接过程优化的BP神经网络(分类应用) - 附代码 文章目录 基于闪电连接过程优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.闪电连接过程优化BP神经网络3.1 BP神经网络参数设置3.2 闪电连接过程算…

互联网Java工程师面试题·Java 总结篇·第四弹

目录 31、String s new String(“xyz”);创建了几个字符串对象? 32、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class&am…

【Qt控件之QToolButton】概述及示例

简介 QToolButton 类提供了一个快速访问命令或选项的按钮,通常在 QToolBar 内部使用。 工具按钮是一种特殊的按钮,用于快速访问特定的命令或选项。与普通的命令按钮相反,工具按钮通常不显示文本标签,而是显示一个图标。 通常情…

文件夹加密后,忘记文件夹密码怎么办?

文件夹加密是保护文件夹数据安全的重要手段,没有正确的密码将无法访问文件夹。那么,如果我们忘记了文件夹密码该怎么办呢?下面我们就一起来了解一下。 忘记文件夹密码怎么办? 以夏冰加密软件的产品为例,能够为文件夹设…

Groovy语法Gradle配置学习笔记

第一部分:Groovy语法 变量的类型和定义 Groovy所有类型都是对象类型: int x 10 println x.class double y 3.14 println y.classdef 定义变量: def str "dddd" println str.class字符串 字符串: // 单引号 双引号…

【环境配置】Windows10上的OpenFace安装与使用

(小乱,待整理,先将就用) github下载,安装必要的依赖,参考自: 缺东西的到这里看,缺啥安装啥 pip install opencv-pythonpip install CMakepip install Boostpip install dlib这些我…

去中心遇见混币器

区块链的去中心化交易所在保护隐私和安全性上有着无可比拟的优势,用户甚至不需要提供注册资料,只要有web3钱包即可跟智能合约交易。在uniswap上可兑换绝大多数加密币,新推出的衍生品交易所ununx已经可以交易美股,期货和外汇,一个全…

Babel 在Powershell 上无法查看版本

ES6 模块语法不能应用在ES5环境中 (ES6模块化语法不能在node.js中执行),此时需要Babel进行转码 通过npm install -g babel-cli 安装好后,想通过 babel --version产看版本。但是无法查看 首先,我们要以管理员方式运行PowerShell,&…

网工记背配置基础命令总结(4)---DHCP配置

目录 1.DHCP相关配置 2.基于不同网段内DHCP服务器和DHCP中继 3.VRRP组网下同网段内配置基于全局地址池的DHCP服务器 4.配置DHCP客户端 5.DHCP snooping(网关防假冒)配置 6.IPSG(IPMAC绑定)配置 1.配置IPSG防止主机私自更改IP地址(静态绑定) 2.配…

Springboot整合WebSocket实现浏览器和服务器交互

Websocket定义 代码实现 引入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>配置类 import org.springframework.context.annotation.Bean;i…

Supervisor监控Go程序

目的&#xff1a; 线上服务有时候会由于一些bug导致painc&#xff0c;程序终止&#xff0c;这个时候需要自动重启项目&#xff0c;让项目能继续提供服务。 容器启动Golang项目 vscode安装golang插件,让vscode可以运行go代码 提示没有go环境&#xff0c;服务器本地确实是没有…

AMEYA360:君正低功耗AIoT图像识别处理器—X1600/X1600E

• 高性能 XBurst 1 CPU&#xff0c;主频1.0GHz • 超低功耗 • 内置LPDDR2(X1600&#xff1a;32MB&#xff0c;X1600E&#xff1a;64MB) • 实时控制核XBurst 0&#xff0c;面向安全管理和实时控制 • 丰富的外设接口 应用领域 • 基于二维码的智能商业 • 智能物联网 • 高端…

Leetcode刷题详解——有效三角形的个数

1.题目链接&#xff1a;有效三角形的个数 2.题目描述&#xff1a; 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3示…

【数据可视化】—大屏数据可视化展示

【数据可视化】—大屏数据可视化展示 一、数据可视化 数据可视化的目的&#xff1a;借助于图形化工具&#xff0c;清晰有效的传达与沟通信息。 数据可视化可以把数据从冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。 二、 免费数据可视化库 Echarts 百度…

7-k8s-helm管理

文章目录 一、为什么需要Helm二、Helm相关概念介绍三、Helm安装四、Helm指令介绍五、Helm创建tomcat六、Helm创建tomcat其他方式七、Helm创建redis 一、为什么需要Helm k8s部署&#xff1a;k8s平台部署的服务都是由资源文件描述组成&#xff0c;传统的k8s部署应用需要手工编排…

过拟合与过拟合的经典例子

本站原创文章&#xff0c;转载请说明来自 《老饼讲解-机器学习》 ml.bbbdata.com 过拟合是机器学习中最常遇到的问题&#xff0c;本文解析什么叫过拟合 01. 什么是过拟合 本节通过概念解析与可视化例子&#xff0c;讲述什么是过拟合 什么是过拟合 过拟合是指在由于过度拟…

16 - 多线程调优(下):如何优化多线程上下文切换?

通过上一讲的讲解&#xff0c;相信你对上下文切换已经有了一定的了解了。如果是单个线程&#xff0c;在 CPU 调用之后&#xff0c;那么它基本上是不会被调度出去的。如果可运行的线程数远大于 CPU 数量&#xff0c;那么操作系统最终会将某个正在运行的线程调度出来&#xff0c;…

4.3 划分子网和构造超网

思维导图&#xff1a; 4.3.1 划分子网 **4.3 划分子网和构造超网笔记&#xff1a;** --- **4.3.1 划分子网** **1. 两级IP地址到三级IP地址的转变&#xff1a;** **关键点&#xff1a;** - **问题背景&#xff1a;** 早期的ARPANET对IP地址的设计存在不足&#xff1a; 1…

python 之f-strings 来格式化字符串

文章目录 当使用 f-strings 来格式化字符串时&#xff0c;可以在字符串中嵌入变量的值以及其他表达式的结果。以下是一些示例&#xff1a; 基本用法&#xff1a; name "Alice" age 30print(f"My name is {name} and I am {age} years old.")输出&#…

树莓派和arduino的恩恩怨怨

一、负责与树莓派互动的putty的会话经常断&#xff0c;不爽&#xff1a; 参考&#xff1a;【SSH】SSH自动断开连接的原因和解决办法|SSH保持长连接方法_ssh连上几秒就断开了_bandaoyu的博客-CSDN博客 用nano 1、修改 /etc/profile中改MOUT的值&#xff1a;export TMOUT0 ec…