详解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对象链式操作代码(jquery)
Jul 04 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
Nov 30 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 Javascript
JavaScript模拟实现网易云轮播效果
Apr 04 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入门经历和学习过程分享
2014/04/11 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
利用python程序帮大家清理windows垃圾
2017/01/15 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
男性健康日的活动方案
2014/08/18 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
Python函数对象与闭包函数
2022/04/13 Python