详解Node.js开发中的express-session


Posted in Javascript onMay 19, 2017

什么是session

session是保存在服务器端的会话。session的典型应用场景是用户登录某网站之后,将其登录信息放入session,在以后的每次请求中查询相应的登录信息以确保该用户合法。比如购物车等等经典场景

为什么要使用session

谈及session一般是在web应用的背景之下,我们知道web应用是基于HTTP协议的,而HTTP协议恰恰是一种无状态协议。也就是说,用户从A页面跳转到B页面会重新发送一次HTTP请求,而服务端在返回响应的时候是无法获知该用户在请求B页面之前做了什么的。

而正是这种web动态化的需求,给HTTP协议提出了一个难题:一个无状态的协议怎样才能关联两次连续的请求呢?也就是说无状态的协议怎样才能满足有状态的需求呢?

此时有状态是必然趋势而协议的无状态性也是木已成舟,因此我们需要一些方案来解决这个矛盾,来保持HTTP连接状态,于是出现了cookie和session。

session与cookie的关系

上面提到解决HTTP协议自身无状态的方式有cookie和session。二者都能记录状态,前者是将状态数据保存在客户端,后者则保存在服务端。

安全性

cookie将信息保存在客户端,如果不进行加密的话,无疑会暴露一些隐私信息,安全性很差,一般情况下敏感信息是经过加密后存储在cookie中,但很容易就会被窃取。而session只会将信息存储在服务端,如果存储在文件或数据库中,也有被窃取的可能,只是可能性比cookie小了太多。

Session安全性方面比较突出的是存在会话劫持的问题,这是一种安全威胁,总体来讲,session的安全性要高于cookie。

express框架之session 内存存储

express-session 是基于express框专门用于处理session的中间件。session的认证机制离不开cookie,需要同时使用cookieParser 中间件。

var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');

var app = express();

app.use(cookieParser());
app.use(session({
  secret: '12345',
  name: 'testapp',  //这里的name值得是cookie的name,默认cookie的name是:connect.sid
  cookie: {maxAge: 80000 }, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
  resave: false,
  saveUninitialized: true,
}));


app.get('/awesome', function(req, res){
  
  if(req.session.lastPage) {
    console.log('Last page was: ' + req.session.lastPage + ".");  
  }  
  req.session.lastPage = '/awesome'; //每一次访问时,session对象的lastPage会自动的保存或更新内存中的session中去。
  res.send("You're Awesome. And the session expired time is: " + req.session.cookie.maxAge);
});

app.get('/radical', function(req, res){
  if (req.session.lastPage) {
    console.log('Last page was: ' + req.session.lastPage + ".");  
  }
  req.session.lastPage = '/radical'; 
  res.send('What a radical visit! And the session expired time is: ' + req.session.cookie.maxAge);
});

app.get('/tubular', function(req, res){
  if (req.session.lastPage){
    console.log("Last page was: " + req.session.lastPage + ".");  
  }

  req.session.lastPage = '/tubular';
  res.send('Are you a suffer? And the session expired time is: ' + req.session.cookie.maxAge);
});


app.listen(5000);

一旦我们将express-session中间件用use挂载后,我们可以很方便的通过req参数来存储和访问session对象的数据。req.session是一个JSON格式的JavaScript对象,我们可以在使用的过程中随意的增加成员,这些成员会自动的被保存到option参数指定的地方,默认即为内存中去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
通过JavaScript控制字体大小的代码
Oct 04 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
动态加载js文件简单示例
Apr 21 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
Sep 28 Javascript
浅谈Angular 的变化检测的方法
Mar 01 Javascript
优雅地使用loading(推荐)
Apr 20 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
vue监听用户输入和点击功能
Sep 27 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
前端页面文件拖拽上传模块js代码示例
May 19 #Javascript
jQuery操作之效果详解
May 19 #jQuery
AngularJS中的promise用法分析
May 19 #Javascript
几种响应式文字详解
May 19 #Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 #Javascript
vue.js动态数据绑定学习笔记
May 19 #Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 #Javascript
You might like
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
js form action动态修改方法
2008/11/04 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
vue cli 全面解析
2018/02/28 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
wxPython学习之主框架实例
2014/09/28 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python属于软件吗
2020/06/18 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
win10安装python3.6的常见问题
2020/07/01 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
毕业生教师求职信
2013/10/20 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
色戒观后感
2015/06/12 职场文书
红色电影观后感
2015/06/18 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
pycharm代码删除恢复的方法
2021/06/26 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle