session认证

目录

前言

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.bodyreq.session.islogin = trueres.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.bodyreq.session.islogin = trueres.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.rhkb.cn/news/160203.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WLAN 无线案例(华为AC控制器配置模板)

实验说明: 无线用户VLAN 30 192.168.30.0/24 AP和AC用VLAN 20 192.168.20.0/24 有线网段 VLAN 10 192.168.10.0/24 步骤一:全网互通 sw1: sysname sw1 # vlan batch 10 20 30 # dhcp enable # ip pool 20 gateway-list 192.168.20.1…

JAVA学习(6)-全网最详细~

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

UDP与TCP协议

很抱歉,我之前写好的UDP与TCP文章不小心被删了,所以,这篇文章只有一半,后面我会尽快补全。 在完成HTTPS的学习后,我们就完成了应用层的所有讲解,下面我们开始讲解传输层,这一层常用的协议为TCP…

MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队

背景 在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-index merge(索引合并)导致数据库死锁。 定义 index merge(索引合并):该数据库查询优化的一种技术&#xff0…

JOSEF约瑟 漏电继电器 JD1-200 工作电压:380V 孔径:45mm 50~500mA

JD1系列漏电继电器 系列型号 JD1-100漏电继电器 JD1-200漏电继电器 JD1-250漏电继电器 JD1系列漏电继电器原为分体式固定式安装,为适应现行安装场合需要,上海约瑟继电器厂在产品原JD1一体式漏电继电器基础上进行产品升级,开发出现在较为…

从零开始学习调用百度地图网页API:二、初始化地图,鼠标交互创建信息窗口

目录 代码结构headbodyscript 调试 代码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalable…

黑马JVM总结(三十四)

&#xff08;1&#xff09;JMM概述 &#xff08;2&#xff09;JMM-原子性-synchronized java内存模型是如何保证原子性的呢&#xff0c;它是通过synchroized关键字&#xff0c;来达到这个目的的 第一个线程来了进入同步代码块之后&#xff0c;把这个对象加上锁了&#xff0c;…

LockSupport-LockSupport是什么及等待唤醒机制对比

4.2 LockSupport是什么 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语&#xff0c;其中park()和unpack()而作用分别是 阻塞线程和解除阻塞线程. 4.3 线程等待唤醒机制 4.3.1 三种让线程等待和唤醒的方法 方式一&#xff1a;使用Object中的wait()方法让线程等待&a…

【广州华锐互动】人体血管器官3D动态展示为医学生提供哪些便利?

人体血管器官3D动态展示是一种采用先进的计算机图形技术和立体成像技术&#xff0c;对人体内部结构和功能进行三维可视化的教学方法。这种教学方式以其独特的优势&#xff0c;正在改变传统的解剖学教学模式&#xff0c;为医学教育带来了革新。 首先&#xff0c;3D动态演示能够提…

ROS系列(二):rosbag 中提取视频数据

一、环境安装 当前环境在上一篇文章的基础上进行配置。 ROS系列&#xff08;一&#xff09;&#xff1a;【环境配置】rosbag 包安装_安装rosbag-CSDN博客 继续安装 sudo apt install ffmpeg python 包如下 pip install sensor_msgs --extra-index-url https://rospypi.gi…

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

20、重载&#xff08;Overload&#xff09;和重写&#xff08;Override&#xff09;的区别。重载的方法能否根据返回类型进行区分&#xff1f; 方法的重载和重写都是实现多态的方式&#xff0c;区别在于前者实现的是编译时的多态性&#xff0c;而后者实现的是运行时的多态性。重…

ROS opencv 人脸识别

人脸识别需要在输入的图像中确定人脸&#xff08;如果存在&#xff09;的位置、大小和姿态&#xff0c;往往用于生物特征识别、视频监听、人机交互等应用中。2001年&#xff0c;Viola和Jones提出了基于Haar特征的级联分类器对象检测算法&#xff0c;并在2002年由Lienhart和Mayd…

Linux安装rpm包在线安装mysql5.7

以前安装过mysql 前言&#xff1a;检查以前是否装有mysql rpm -qa|grep -i mysql安装了会显示&#xff1a;   bt-mysql57-5.7.31-1.el7.x86_64 停止mysql服务和删除之前安装的mysql rpm -e bt-mysql57-5.7.31-1.el7.x86_64查找并删除mysql相关目录 find / -name mysql/va…

基础课2——自然语言处理

1.概念 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学领域与人工智能领域中的一个重要方向&#xff0c;它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理的主要研究方向包括&#xff1a; 语言学研究&…

【版本控制】Git(学习笔记)

一、Git工作流程图 clone&#xff08;克隆&#xff09;: 从远程仓库中克隆代码到本地仓库checkout &#xff08;检出&#xff09;&#xff1a;从本地仓库中检出一个仓库分支然后进行修订add&#xff08;添加&#xff09;: 在提交前先将代码提交到暂存区commit&#xff08;提交&…

AI算法检测对无人军用车辆的MitM攻击

南澳大利亚大学和查尔斯特大学的教授开发了一种算法来检测和拦截对无人军事机器人的中间人&#xff08;MitM&#xff09;攻击。 MitM 攻击是一种网络攻击&#xff0c;其中两方&#xff08;在本例中为机器人及其合法控制器&#xff09;之间的数据流量被拦截&#xff0c;以窃听或…

css3自动吸附scroll-snap

我们希望可以一块一块的滚动&#xff0c;比如当前一个块滚出去了一部分并且后一个块滚进来一部分的时候&#xff0c;实现后一个块自动滚入或者前一个块回弹到初始位置这种效果&#xff0c;以前的时候用js需要写比较复杂的判断逻辑&#xff0c;后来有了一个css scroll snap这个方…

C# Winform编程(2)常用控件

C# Winform编程&#xff08;2&#xff09;常用控件 常用控件 常用控件 标签&#xff0c;文本&#xff0c;按钮&#xff0c;列表框&#xff0c;组合框等的使用 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks…

apache shiro安全框架反序列化漏洞

用linux搭建一个环境 配置下源vi /etc/apt/sources.list 源如果是kali官方的有时候会下载不了&#xff0c;改成中科大的源 更新下源apt-get update 安装docker-compose 重启kali 启动docker容器 apt-get install docker apt-get install docker-compose reboot service do…

Prometheus的Pushgateway快速部署及使用

prometheus-pushgateway安装 一. Pushgateway简介 Pushgateway为Prometheus整体监控方案的功能组件之一&#xff0c;并做于一个独立的工具存在。它主要用于Prometheus无法直接拿到监控指标的场景&#xff0c;如监控源位于防火墙之后&#xff0c;Prometheus无法穿透防火墙&…