Express Session实现登录验证功能(附代码)
这次给大家带来Express Session实现登录验证功能(附代码),Express Session实现登录验证功能的注意事项有哪些,下面就是实战案例,一起来看一下。
对于使用Express和Session实现登录验证也是很多人在探求的,这次文章就给大家简单的介绍下怎么使用Express和Session实现登录验证,具体实现代码是什么?一起来了解下。
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 --save npm install body-parser --save npm install express-session --save npm install ejs --save
3. 登录与验证
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> <p>用户名:<span><%= username %> </span> <a href="/logout" rel="external nofollow" >退出登录</a></p> </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' }) }));
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是Express Session实现登录验证功能(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

我们通常接收到政府或其他机构发送的PDF文件,有些文件带有数字签名。验证签名后,我们会看到SignatureValid消息和一个绿色勾号。如果签名未验证,会显示有效性未知。验证签名很重要,下面看看如何在PDF中进行验证。如何在PDF中验证签名验证PDF格式的签名使其更可信,文档更容易被接受。您可以通过以下方式验证PDF文档中的签名。在AdobeReader中打开PDF右键单击签名,然后选择显示签名属性单击显示签名者证书按钮从“信任”选项卡将签名添加到“受信任的证书”列表中单击验证签名以完成验证让

1、打开微信进入后,点击搜索图标,输入微信团队,点击下方的服务进入。2、进入后,点击左下方的自助工具的选项。3、点击后,在上方的选项内,点击解封/申诉辅助验证的选项。

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

PHPSession跨域问题的解决方法在前后端分离的开发中,跨域请求已成为常态。在处理跨域问题时,我们通常会涉及到session的使用和管理。然而,由于浏览器的同源策略限制,跨域情况下默认情况下无法共享session。为了解决这个问题,我们需要采用一些技巧和方法来实现session的跨域共享。一、使用cookie跨域共享session最常

PHP8是PHP的最新版本,为程序员带来了更多的便利和功能。这个版本特别关注安全性和性能,其中一个值得注意的新特性是增加了验证和签名功能。在本文中,我们将深入了解这些新的功能及其用途。验证和签名是计算机科学中非常重要的安全概念。它们通常用于确保传输的数据是完整和真实的。在处理在线交易和敏感信息时,验证和签名变得尤为重要,因为如果有人能够篡改数据,可能会对

印度金融系统代码是缩写。参与电子资金转移系统的印度银行分支机构由一个特殊的11位字符代码进行标识。印度储备银行在互联网交易中使用此代码在银行之间转移资金。IFSC代码分为两个部分。银行由前四个字符进行标识,而分支机构由最后六个字符进行标识。NEFT(全国电子资金转移)、RTGS(实时毛额结算)和IMPS(即时支付服务)是一些需要IFSC代码的电子交易。Method使用正则表达式验证IFSC代码的一些常见方法有:检查长度是否正确。检查前四个字符。Checkthefifthcharacter.Che

在Laravel中,路由在paths/文件夹中定义。路由在web.php文件中定义。该文件是在laravel安装完成后创建的。Laravel路由接受URI和闭包函数,如下所示-useIlluminate\Support\Facades\Route;Route::get('/student',function(){return'HelloStudent';});在web/routes.php中定义的路由被分配到web中间件组中,并且它们具有会话状态和CSRF保护。您还可以在路由中调用控制器如下所示

JavaScriptCookie使用JavaScriptcookie是记住和跟踪偏好、购买、佣金和其他信息的最有效方法。更好的访问者体验或网站统计所需的信息。PHPCookieCookie是存储在客户端计算机上的文本文件并保留它们用于跟踪目的。PHP透明地支持HTTPcookie。JavaScriptcookie如何工作?您的服务器将一些数据发送到访问者的浏览器cookie的形式。浏览器可以接受cookie。如果存在,它将作为纯文本记录存储在访问者的硬盘上。现在,当访问者到达站点上的另一个页面时
