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 相关文章推荐
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
nodejs文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 NodeJs
nodejs制作小爬虫功能示例
Feb 24 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中实现获取IP和地理位置类分享
2015/02/10 PHP
新浪的图片新闻效果
2007/01/13 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
Python isinstance函数介绍
2015/04/14 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Django  ORM 练习题及答案
2019/07/19 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
村干部承诺书
2014/03/28 职场文书
股份合作协议书
2014/04/12 职场文书
学校教研活动总结
2014/07/02 职场文书
大专学生求职信
2014/07/04 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
个人工作表现自我评价
2015/03/06 职场文书
幼儿园教师求职信
2015/03/20 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Python中字符串对象语法分享
2022/02/24 Python
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL