时间:2021-05-28
1. 写在前面
当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态。这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我们退出登录,或者保存的登录状态过期。那服务器是通过什么存储我们的登录状态的呢? 答案就是 Session ,服务通过 Session 能够记录每个客户端连接的状态。关于 Session 的原理,在这就不多说了,本文主要介绍在 Express 框架中,如何使用 Session 来实现用户登录身份验证。
2. 环境配置
在Node 环境中, 并没有集成 Express 和 Session 的库,因此需要进行安装,首先进入建立一个项目目录,然后在项目根目录中,利用下面命令安装四个模块。
1) Express
该模块能够让我们快速的搭建一个 Web 开发框架。
2) body-parser
该模块是 Express 模块的中间件,方便我们解析浏览器发送来的 body 数据。
3) express-session
该模块也是 Express 模块中间件,方便我们处理客户端的 session。
4) ejs
该模块是一个渲染引擎。 方便我们将后台变量数据绑定到前台页面上。
安装如下:
npm install express --savenpm install body-parser --savenpm install express-session --savenpm install ejs --save3. 登录与验证
Session 能够标记客户端在服务器上的状态。利用这一点,我们能够实现客户端的登录验证。Session 登录验证的流程大致为:客户端若在未登录的状态下请求主页,那么服务器将该请求重定向到登录页面;客户端在登录后,服务器需要记录保存该客户端的登录状态,并给予一个活动期限,这样下一次服务器请求主页的时候,就能够判断该客户端的登录状态,若登录状态有效,直接返回客户端需要的页面,否则重定向到登录页面。
对于 Session 的过期时间,如果没有设置 Session 的过期时间,服务器会根据自己配置中默认有效期,将长期不与服务器交互的 Session 进行删除。
下面贴出实例代码,界面比较简单,服务器后台代码注释写的很清楚,因此就不再进行说明了。
项目的目录结构如下:
登录页面(login.html) 代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> </style></head><body> <form action="/login" method="POST"> 用户名: <input type="text" name="username"/> <br> 密码: <input type="password" name="pwd"/> <input type="submit" value="Submit"/> </form></body></html>主页(home.html)代码如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <div>用户名:<span><%= username %> </span> <a href="/logout" rel="external nofollow" >退出登录</a></div></body></html>服务器(app.js)代码如下:
/** * Created by tjm on 9/7/2017. */var express = require('express');var app = express();var session = require('express-session');var bodyparser = require('body-parser');// 下面三行设置渲染的引擎模板app.set('views', __dirname); //设置模板的目录app.set('view engine', 'html'); // 设置解析模板文件类型:这里为html文件app.engine('html', require('ejs').__express); // 使用ejs引擎解析html文件中ejs语法app.use(bodyparser.json()); // 使用bodyparder中间件,app.use(bodyparser.urlencoded({ extended: true }));// 使用 session 中间件app.use(session({ secret : 'secret', // 对session id 相关的cookie 进行签名 resave : true, saveUninitialized: false, // 是否保存未初始化的会话 cookie : { maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒 },}));// 获取登录页面app.get('/login', function(req, res){ res.sendFile(__dirname + '/login.html')});// 用户登录app.post('/login', function(req, res){ if(req.body.username == 'admin' && req.body.pwd == 'admin123'){ req.session.userName = req.body.username; // 登录成功,设置 session res.redirect('/'); } else{ res.json({ret_code : 1, ret_msg : '账号或密码错误'});// 若登录失败,重定向到登录页面 }});// 获取主页app.get('/', function (req, res) { if(req.session.userName){ //判断session 状态,如果有效,则返回主页,否则转到登录页面 res.render('home',{username : req.session.userName}); }else{ res.redirect('login'); }})// 退出app.get('/logout', function (req, res) { req.session.userName = null; // 删除session res.redirect('login');});app.listen(8000,function () { console.log('http://127.0.0.1:8000')})到此,session 实现登录验证就完成。上面的例子 session 是保存在服务内存中,当然还可以保存在文件或数据库中,只需要配置 session 中间件即可。
app.use(session({ secret: 'secretkey', store: new MongoStore({ db: 'sessiondb' })}));上面的代码则是将 session 保存到 MongoDB 数据库,当然 Session 的配置还有一些,具体参考:
https:///package/express-session
总结
以上所述是小编给大家介绍的Express + Session 实现登录验证功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这里我们以用户登录鉴权为例express依赖express-session中间件实现session功能若我们不加载express-session组件router
文档概览本文基于express、express-session实现了简易的登录/登出功能,完整的代码示例可以在这里找到。环境初始化首先,初始化项目express
验证码的校验是利用PHP中的SESSION功能来实现。在最顶端声明函数session_start();告诉服务器我们要用这个函数的功能。session_star
验证码的校验是利用PHP中的SESSION功能来实现。在最顶端声明函数session_start();告诉服务器我们要用这个函数的功能。session_star
用户认证组件: 功能:用session记录登录验证状态 前提:用户表:django自带的auth-userpython3manage.pycreatesup