详解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 prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
event对象的方法 兼容多浏览器
Jun 27 Javascript
JavaScript Object的extend是一个常用的功能
Dec 02 Javascript
JS刷新框架外页面七种实现代码
Feb 18 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
动态加载js、css的简单实现代码
May 26 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 Javascript
Openlayers绘制聚合标注
Sep 28 Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 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
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
JQuery 弹出框定位实现方法
2010/12/02 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
深入研究React中setState源码
2017/11/17 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python怎么判断模块安装完成
2020/06/19 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
python实现批处理文件
2020/07/28 Python
直接有效的自我评价
2014/01/11 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
班主任班级寄语大全
2014/04/04 职场文书
国际会计专业求职信
2014/08/04 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2014年教研工作总结
2014/12/06 职场文书
入团介绍人意见范文
2015/06/04 职场文书
运动会5000米加油稿
2015/07/21 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS