Nodejs中session的简单使用及通过session实现身份验证的方法


Posted in NodeJs onFebruary 04, 2016

session 不用多介绍,使一个http可以对应一个终端用户。

session的本质使用cookie来实现。

原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie, 再去固定地点(数据库,文件)检索出对应的用户身份。把身份赋值给本次请求的request,在程序处理中就知晓了用户的身份了。(在PHP,ASP或者其他服务端语言中都自动帮你实现了)

实现cookie

需要为每一个用户设置一个可以标示用户身份的cookie。可以使用如下规则

注册邮箱MD5值+密码MD5值+随机码MD5值。(仅仅举例,这可能并不是一个好的方案)

服务端代码片段:

res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]);

cookie

sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee

使用 cookie 获取用户身份,设置session

把所有非静态资源的请求都定向到这里处理。获取cookie,把cookie拆分并在数据库查找符合条件的用户。最后使用 next 跳转到下一个请求逻辑。

下一个请求逻辑就可是直接使用 req.session.user 来获取 user 对象了。

session:function(req, res, next){
req.session = {};
if( req.cookies && req.cookies.sid ){
var a = req.cookies.sid.split("|");
var hexMail = a[0];
var hexPwd = a[1];
var hexRandom = a[2];
UserModel.hexFind(hexMail, hexPwd, hexRandom, function( status ){
//console.log("hexFind", status );
if(status.code == "0"){
//req.cookiesSelecter = cookiesSelecter;
req.session.user = status.result;
}
next();
});
}else{
next();
} 
}

下面给大家说说nodejs通过session实现身份验证

nodejs express session 身份验证

1)引入模块

var session = require('express-session');
var cookieParser = require('cookie-parser');

2)应用cookie及session

app.use(cookieParser());
app.use(session({
resave: true, // don't save session if unmodified
saveUninitialized: false, // don't create session until something stored
secret: 'love'
}));

3)请求时,应用身份验证

app.use(function(req,res,next){
if (!req.session.user) {
if(req.url=="/login"){
next();//如果请求的地址是登录则通过,进行下一个请求
}
else
{
res.redirect('/login');
}
} else if (req.session.user) {
next();
}
});

4)登陆设计

app.get('/login',function(req,res){
res.render("login");
});
app.post('/login',function(req,res){
if(req.body.username=="love" && req.body.password=="love"){
var user = {'username':'love'};
req.session.user = user;
res.redirect('/admin/app/list');
}
else
{
res.redirect('/login');
}
});
app.get('/logout',function(req,res){
req.session.user = null;
res.redirect('/login');
});
NodeJs 相关文章推荐
Nodejs极简入门教程(一):模块机制
Oct 25 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
详解Nodejs内存治理
May 13 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 #NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 #NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 #NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 #NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 #NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 #NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 #NodeJs
You might like
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php header示例代码(推荐)
2010/09/08 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
jquery 循环显示div的示例代码
2013/10/18 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python内存读写操作示例
2018/07/18 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
通用C#笔试题附答案
2016/11/26 面试题
入党申请书自我鉴定
2013/10/12 职场文书
家长对孩子评语
2014/01/30 职场文书
《日月潭》教学反思
2014/02/28 职场文书
2014年元旦感言
2014/03/06 职场文书
投资意向书范本
2014/04/01 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
三严三实学习心得体会
2014/10/13 职场文书
复试通知单模板
2015/04/24 职场文书
论文评审意见
2015/06/05 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技