详解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 相关文章推荐
Firefox getBoxObjectFor getBoundingClientRect联系
Oct 26 Javascript
js操作二级联动实现代码
Jul 27 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
JavaScript中的值类型详细介绍
Dec 29 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
Apr 27 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
微信小程序商城项目之淘宝分类入口(2)
Apr 17 Javascript
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 jQuery
Vue中的transition封装组件的实现方法
Aug 13 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
Jun 17 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 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
phpmyadmin的#1251问题
2006/11/25 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
Js的MessageBox
2006/12/03 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
JavaScript语言核心数据类型和变量使用介绍
2013/08/23 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
Win8下python3.5.1安装教程
2020/07/29 Python
python实现图片识别汽车功能
2018/11/30 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python坐标线性插值应用实现
2019/11/13 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
numpy库reshape用法详解
2020/04/19 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
经典的班主任推荐信
2013/10/28 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
代领毕业证委托书
2014/08/02 职场文书
爬山的活动方案
2014/08/16 职场文书
运动会演讲稿100字
2014/08/25 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
运动员入场词
2015/07/18 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL