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与Mysql的交互示例代码
Aug 18 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
详解Nodejs内存治理
May 13 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 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
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
php swoft框架实例用法
2020/12/22 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
欧洲最大的化妆品连锁公司:Douglas道格拉斯
2017/05/06 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
IT工程师岗位职责
2014/07/04 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
MySQL日期时间函数知识汇总
2022/03/17 MySQL