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服务器(4):路由
Dec 18 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
使用nodejs中httpProxy代理时候出现404异常的解决方法
Aug 15 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 04 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 类自动载入的方法
2015/06/03 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
深入理解Javascript闭包 新手版
2010/12/28 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
javascript生成随机数的方法
2014/05/16 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python使用turtule画五角星的方法
2015/07/09 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
wxPython之解决闪烁的问题
2018/01/15 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
迎八一活动主题
2014/01/31 职场文书
年终奖发放方案
2014/06/02 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
房产公证书格式
2015/01/26 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
公司转让协议书
2016/03/19 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
详解非极大值抑制算法之Python实现
2021/06/28 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL