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实战心得之eventproxy模块控制并发
Oct 27 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
nodejs 搭建简易服务器的图文教程(推荐)
Jul 18 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
nodejs实现范围请求的实现代码
Oct 12 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
简单的php文件上传(实例)
2013/10/27 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
Vue实现日历小插件
2019/06/26 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
python创建临时文件夹的方法
2015/07/06 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
新郎父亲婚宴答谢词
2014/01/11 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
学校少先队工作总结
2015/08/12 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python