Nodejs中session的简单使用及通过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)

相关推荐

  • 详解nodejs express下使用redis管理session

    Session实现原理 实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤: 1.服务器端的产生Session ID 2.服务器端和客户端存储Session ID 3.从HTTP Header中提取Session ID 4.根据Session ID从服务器端的Hash中获取请求者身份信息 使用Express和Redis对Session管理的实现 var session = requ

  • nodejs 的 session 简单使用

    session的本质使用cookie来实现. 原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie, 再去固定地点(数据库,文件)检索出对应的用户身份.把身份赋值给本次请求的request,在程序处理中就知晓了用户的身份了.(在PHP,ASP或者其他服务端语言中都自动帮你实现了) 实现cookie 需要为每一个用户设置一个可以标示用户身份的cookie.可以使用如下规则 注册邮箱MD5值+密码MD5值+随机码MD5值.(仅仅举例,这可能并不是一个好的方案)

  • Nodejs 和Session 原理及实战技巧小结

    一 Cookie 因为HTTP协议是没有状态的,但很多情况下是需要一些信息的,比如在用户登陆后.再次访问网站时,没法判断用户是否登陆过.于是就有了cookies,用于在浏览器端保存用户数据,它有如下特点 1 是在客户端浏览器端才有的 2 用于记录信息,大小最大为4K字节 3 如果使用了cookies,那么任何对该域名的访问都会带上cookies 目前新型网站更多的采用浏览器缓存,cookie会存在一些问题,比如你每次往服务器提交请求时,都会带上cookie,无论是你访问的是不是静态图片. coo

  • PHP和NodeJs开发的应用如何共用Session

    首先了解下session的机制 客户端(浏览器中) cookie 作为键值,匹配服务器端的一个数据.然后客户端每次在 HTTP 请求里面带着那个 cookie,然后服务器端"理所当然"认为服务器端的这个数据是针对该客户端的. 某些系统喜欢把 session 内容编码后加密放在 cookie 里面 那么你可以 1.你可以共用 cookie,然后把数据放在 nodejs 和 拍黄片(Sorry,是PHP) 都可以取到的地方,例如 redis.影像中 php 默认的 session 是写他自

  • Nodejs进阶:express+session实现简易登录身份认证

    文档概览 本文基于express.express-session实现了简易的登录/登出功能,完整的代码示例可以在这里找到. 环境初始化 首先,初始化项目 express -e 然后,安装依赖. npm install 接着,安装session相关的包. npm install --save express-session session-file-store session相关配置 配置如下,并不复杂,可以见代码注释,或者参考官方文档. var express = require('expres

  • PHP中配置IIS7实现基本身份验证的方法

    在PHP运行环境中配置IIS7实现基本身份验证的方法,其实IIS7身份验证的方法有好几种,比如Windows身份验证.摘要式身份验证等,相对来说IIS7基本身份验证是最简单的一种,下面以图文方式介绍下IIS7基本身份验证的实现方法及注意事项,希望对PHP入门学习的朋友有所帮助. 准备工作 1.由于默认IIS7并没有安装配置身份验证功能,所以如果想要实现IIS7基本身份验证,首先必须安装IIS7身份验证功能,你需要打开 控制面板>程序和功能>打开或关闭Windows功能,找到IIS,选择基本身份

  • Nodejs中session的简单使用及通过session实现身份验证的方法

    session 不用多介绍,使一个http可以对应一个终端用户. session的本质使用cookie来实现. 原理大概是:http 带来服务端提前设置 cookie,服务端拿到标示用户身份的cookie, 再去固定地点(数据库,文件)检索出对应的用户身份.把身份赋值给本次请求的request,在程序处理中就知晓了用户的身份了.(在PHP,ASP或者其他服务端语言中都自动帮你实现了) 实现cookie 需要为每一个用户设置一个可以标示用户身份的cookie.可以使用如下规则 注册邮箱MD5值+密

  • asp.net中几种常用的身份验证方法总结

    前言 在B/S系统开发中,经常需要使用"身份验证".因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性.通俗点来说:对于大多数的内部系统.业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面.而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台

  • asp.net中的窗体身份验证(最简单篇)

    在创建网站中,常常会使用到身份验证.asp.net中内置了几种身份验证的方式,如Windows.Froms.Passport等.这几种身份验证的方式各有不同.一般来说,网站的身份验证方式都会经过以下几个步骤: 1.输入用户名和密码,单击确定按钮. 2.在后台判断用户名和密码是否正确,如果错误返回提示:如果正确,进入可访问的页面. 在ASP时代,通常都会在验证用户名和密码是否匹配之后,创建一个Session,然后在每个需要验证的页面中判断Session是否存在,如果存在,则显示页面内容:如果不存在

  • JAVA中的Token 基于Token的身份验证实例

    最近在做项目开始,涉及到服务器与安卓之间的接口开发,在此开发过程中发现了安卓与一般浏览器不同,安卓在每次发送请求的时候并不会带上上一次请求的SessionId,导致服务器每次接收安卓发送的请求访问时都新建一个Session进行处理,无法通过传统的绑定Session来进行保持登录状态和通讯状态. 基于传统方法无法判断安卓的每次请求访问状态,故查询资料了解到Token,特殊的身份证验证.以下是网上搜寻资料所得,作为学习总结资料. 令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧.to

  • 详解Angular开发中的登陆与身份验证

    前言 由于 Angular 是单页应用,会在一开始,就把大部分的资源加载到浏览器中,所以就更需要注意验证的时机,并保证只有通过了验证的用户才能看到对应的界面. 本篇文章中的身份验证,指的是如何确定用户是否已经登陆,并确保在每次与服务器的通信中,都能够满足服务器的验证需求.注意,并不包括对具体是否具有某一个权限的判断. 对于登陆,主要是接受用户的用户名密码输入,提交到服务器进行验证,处理验证响应,在浏览器端构建身份验证数据. 实现身份验证的两种方式 目前,实现身份验证的方法,主要有两个大类: Co

  • jsp中存取session值简单介绍

    我们在jsp中会操作一些表单的值.或者获得用户的值操作,那么我们就可以使用jsp的作用域操作,1.page.request.session.application这四个作用域,其中最常用的便是request和session的域操作. 使用session域操作,因为使用的web容器是Tomcat服务器,而session只要不关闭浏览器,它就会一直存在不会消失,还是就是时间的默认限制30分钟,那么接下来便是在jsp中使用session, <%@ page language="java"

  • Nodejs中的JWT和Session的使用

    最近的项目需要在node服务端做一个用户登录的校验以及权限拦截,专业一点叫用户认证与授权,经过一番收集资料,目前常用的有两种--JWT和Session 使用JWT JWT是JsonWebTokens的简写形式,具体是啥我就不详细写了,可以查看资料. 这里引入两个插件,express-jwt和JsonWebTokens,- JsonWebTokens:用作生成token express-jwt:用作验证指定http请求的JsonWebTokens的有效性,如果有效就将JsonWebTokens的值

  • nodejs中Express与Koa2对比分析

    知会上看到有个问题 <Express会被Koa2取代吗?> .刚好对Express.koa有点小研究,于是简单回答了一下. 1.先说结论 目前没有看到Express会被koa2取代的迹象. 目前来说,Express的生态更成熟,入门门槛相对较低.从npm上的下载热度来说,两者的差距还较大,Express的月下载量约为koa2的40倍. 不过koa2的亮点足够吸引人,生态也开始变得完善. 2.从使用门槛来说 从使用上来说,Express对初学者更有好些,对着官网修修改改改就能做点东西出来. ko

  • nodejs中art-template模板语法的引入及冲突解决方案

    使用Webstorm创建nodejs express应用时,默认使用的是jade或者ejs模板,对于不习惯这两种模板语法的人来说确实不是很方便.没关系,这里我们使用art-template模板引擎,使用后可以直接使用html模板: 1.安装art-template npm install art-template 2.修改app.js文件,添加如下代码: // view engine setup app.set('views', path.join(__dirname, 'views')); v

随机推荐