详解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编写点击查看大图的页面半透明遮罩层效果实例
May 09 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
浅谈vue项目重构技术要点和总结
Jan 23 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
Mar 14 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
May 24 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单件模式结合命令链模式使用说明
2008/09/07 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
php根据年月获取季度的方法
2014/03/31 PHP
php实现文件下载代码分享
2014/08/19 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
用pycharm开发django项目示例代码
2018/10/24 Python
Python读取csv文件实例解析
2019/12/30 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
python help函数实例用法
2020/12/06 Python
python中remove函数的踩坑记录
2021/01/04 Python
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
毕业生的自我评价范文
2013/12/31 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
司法局火灾防控方案
2014/06/05 职场文书
记账会计岗位职责
2014/06/16 职场文书
团组织关系介绍信
2019/06/24 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
javascript函数式编程基础
2021/09/15 Javascript
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang