详解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 相关文章推荐
js压缩工具 yuicompressor 使用教程
Mar 31 Javascript
js下写一个事件队列操作函数
Jul 19 Javascript
jQuery阻止同类型事件小结
Apr 19 Javascript
javascript中强制执行toString()具体实现
Apr 27 Javascript
javascript实现文本域写入字符时限定字数
Feb 12 Javascript
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
JS实现css hover操作的方法示例
Apr 07 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
Sep 13 Javascript
前端页面文件拖拽上传模块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
建立文件交换功能的脚本(二)
2006/10/09 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
PHP 图片上传代码
2011/09/13 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python的turtle库使用详解
2019/05/10 Python
Python OpenCV实现视频分帧
2019/06/01 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python3.4中清屏的处理方法
2020/07/06 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
Overload和Override的区别
2012/09/02 面试题
重阳节登山活动方案
2014/02/03 职场文书
仓管岗位职责范本
2014/02/08 职场文书
学生生病请假条范文
2014/02/16 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python