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的10个性能优化技巧
Jul 15 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
php7性能提升的原因详解
2019/10/13 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
js中this的用法实例分析
2015/01/10 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
分享vue里swiper的一些坑
2018/08/30 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
vue实现登录拦截
2020/06/29 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
使用Python处理BAM的方法
2018/09/28 Python
使用Python的turtle模块画国旗
2019/09/24 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
大课间活动制度
2014/01/18 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
技术员岗位职责范本
2015/04/11 职场文书
计划生育责任书
2015/05/09 职场文书
刑事附带民事代理词
2015/05/25 职场文书
演讲开场白台词大全
2015/05/29 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏