Nodejs中session的简单使用及通过session实现身份验证的方法
作者:Jun.lu 发布时间:2024-05-13 10:06:16
标签:node.js,session,使用,身份验证
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');
});
0
投稿
猜你喜欢
- 工资excel表格格式如下所示:使用python批量给每位员工发送工资条信息,格式如下:思路:首先是加载excel,获取当前sheet表格s
- 今天在推上看到一条获取PHP类私有属性的推文,感觉很有意思:顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法:1. 反
- 本文实例分析了Python字符串格式化输出方法。分享给大家供大家参考,具体如下:我们格式化构建字符串可以有3种方法:1 元组占位符m = &
- 在Google Reader上看到网友分享的一个链接,真的发现自己已经out了。上面的这张图,是纯CSS实现的,没有背景图、没有Javasc
- Python 中 ‘unicodeescape' codec can't decode bytes in position
- 简述由于某些原因,在使用 import 时,Python 找不到相应的模块。这时,解释器就会发牢骚 - ImportError。那么,Pyt
- 一、管理数据库连接1、使用配置文件管理连接之约定在数据库上下文类中,如果我们只继承了无参数的DbContext,并且在配置文件中创建了和数据
- 案例:该数据集的是一个关于每个学生成绩的数据集,接下来我们对该数据集进行分析,判断学生是否适合继续深造数据集特征展示1 GRE
- 下面代码即是VBScript代码在服务器端编译后的显示内容,如果我们把这段代码保存成静态文件(HTML)或JS文件,那么上一篇提出的问题就迎
- 1.下载Python官网:传送门根据自己的主机环境下载python2.安装下载完后直接安装,安装时自定义安装路径,这里路径要记下来我的安装路
- 成品效果 <body> <div id="game" style="p
- 一. 概念理解你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会
- web2.0教程4:如何调用css样式表 这些技巧主要讲meta标签设置的,其实与符合web标准关系不大,只要注意在最后加"/&q
- 想通过编写Python代码来打开本地的.mp4格式文件,使用os模块来操作文件。我的电脑默认的是QQ影音播放器,执行Python代码打开默认
- 新下载了一个Pycharm,建了个小demo,期间产生了一个sqlite3文件,由于是第一次打开,就弹出选择打开方式的对话框,手一块直接点了
- Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的
- 1、前言前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用
- 本文实例讲述了Python实现栈和队列的简单操作方法。分享给大家供大家参考,具体如下:先简单的了解一下数据结构里面的栈和堆:栈和队列是两种基
- 本文章是建立在已经安装MySQL数据库的前提,默认安装在C:\Program Files (x86)\MySQL,建议在安装时选中Conne
- 首先创建Profile应用python manage.py startapp profilesprofiles/models.py# -*-