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学习小结(一)
Jul 06 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
轻松创建nodejs服务器(8):非阻塞是如何实现的
Dec 18 NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 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
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php获取错误信息的方法
2015/07/17 PHP
php表单提交实例讲解
2015/11/12 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
详解php中的implements 使用
2017/06/13 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
window.open不被拦截的实现代码
2012/08/22 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
会计专业自我鉴定
2014/02/10 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
微信小程序调用python模型
2022/04/21 Python