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写的一个简单项目打包工具
May 11 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
nodejs 整合kindEditor实现图片上传
Feb 03 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs+websocket实时聊天系统改进版
May 18 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
nodejs中request库使用HTTPS代理的方法
Apr 30 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
解析php类的注册与自动加载
2013/07/05 PHP
php实现查看邮件是否已被阅读的方法
2013/12/03 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
Python简单生成随机姓名的方法示例
2017/12/27 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
群众路线教育实践活动的心得体会
2014/09/03 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
学校食堂管理制度
2015/08/04 职场文书
alibaba seata服务端具体实现
2022/02/24 Java/Android
python通过新建环境安装tfx的问题
2022/05/20 Python