欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Node.js开发中的express-session

程序员文章站 2024-02-07 11:54:34
什么是session session是保存在服务器端的会话。session的典型应用场景是用户登录某网站之后,将其登录信息放入session,在以后的每次请求中查询相应的...

什么是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参数指定的地方,默认即为内存中去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。