详解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 相关文章推荐
dojo 之基础篇
Mar 24 Javascript
IE 条件注释详解总结(附实例代码)
Aug 29 Javascript
十个优秀的Ajax/Javascript实例网站收集
Mar 31 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
May 10 Javascript
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
js限制文本框只能输入数字(正则表达式)
Jul 15 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
ionic中的$ionicPlatform.ready事件中的通用设置
Jun 11 Javascript
vue input实现点击按钮文字增删功能示例
Jan 29 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 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
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python和c语言的主要区别总结
2019/07/07 Python
Python循环实现n的全排列功能
2019/09/16 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
《兰亭集序》教学反思
2014/02/11 职场文书
企业办公室岗位职责
2014/03/12 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
个人更名证明
2015/06/23 职场文书
Vue监视数据的原理详解
2022/02/24 Vue.js