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 npm package.json中文文档
Sep 04 NodeJs
nodejs爬虫抓取数据之编码问题
Jul 03 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
原生nodejs使用websocket代码分享
Apr 07 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 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中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
JS跨域问题详解
2014/11/25 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
Python素数检测的方法
2015/05/11 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
Python time库基本使用方法分析
2019/12/13 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
C#公司笔试题
2014/03/28 面试题
总经理职责
2013/12/22 职场文书
优质服务活动实施方案
2014/05/02 职场文书
房展策划方案
2014/06/07 职场文书
三好学生个人总结
2015/02/15 职场文书
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python