express-session的简单使用说明
我们知道Internet 通过协议分为stateful和stateless两类,而http是stateless协议,客户端发送请求到服务端建立一个连接,请求得到响应后连接即中断,服务器端不会记录状态,因此服务器端想要确定是哪个客户端提交过来的请求,就必须要借助一些东西去完成:session和cookies。
express-session
session存在于服务器端,需要cookies的协议协助才能完成,服务器端和客户端通过session id来建立联系。
express中可以用中间件来使用session,expres-session可以存在内存中,也可以存在mongodb、redis等中。想了解更多中间件可以:
https://www.npmjs.com/package/express-session
使用:
安装: npm install express-session
示例:使用session来判断用户是否已经登录,如果没有登录,则跳转到登录页
//app.js var express = require('express'); var path = require('path'); var favicon = require('static-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); ... //这里传入了一个密钥加session id app.use(cookieParser('Wilson')); //使用就靠这个中间件 app.use(session({ secret: 'wilson'})); ...
//user.js var express = require('express'); var router = express.Router(); var options = require('../config/database-default') var db = require('../config/db.js'); //请求作者页 router.route('/user/index').get(function(req,res,next){ console.log(req.session.user); if(req.session.user){ res.render('user',{title:'作者管理'}); }else{ req.session.originalUrl = req.originalUrl?req.originalUrl:null;//记录用户的请求路径 console.log(req.session.originalUrl); res.redirect('/login'); } })
//login.js var express = require('express'); var router = express.Router(); //后台管理系统登录 router.route('/login').get(function(req,res,next){ if(req.session.islogin){ res.locals.islogin = req.session.islogin; } if(req.cookies.islogin){ req.session.islogin = req.cookies.islogin; } console.log('this is login') res.render('login',{title:'登录'}); }).post(function(req,res){ console.log(req.session.originalUrl); //req.session.user = user;//将用户信息写入到session if(req.session.originalUrl){ var redirectUrl = req.session.originalUrl; req.session.originalUrl = null; }else{//不存在原始请求路径,则将用户重定向到首页路劲 var redirectUrl = '/index'; }; console.log('yes'); req.session.user = 'zhangsan'; res.redirect(redirectUrl); }); module.exports = router;
清除session
req.session.destroy();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~