【问题标题】:express-session variable is changed after loading api加载 api 后更改 express-session 变量
【发布时间】:2017-02-14 09:53:50
【问题描述】:

我是 expressjs 的新手,我的问题与 express-session 有关。

app.js 在下面,在 package.json 中,我安装了 express 和 express-session。

如果我转到 'localhost:3000',在控制台中,req.session.flag 值将像这样变化:


前一个:未定义
后一个:1
前两个:1
两个之后:2

之后,如果我转到'localhost:3000/three',在控制台中,req.session.flag 的值会变成这样:


前三个:2
三个之后:3

如果此时我刷新 'localhost:3000/three',req.session.flag 的值将是 2 而不是 3。


前三个:2
三个之后:3

为什么会这样? req.session.flag 的值从上一点变成了 3,为什么在控制台中它从 2 开始?

如果我转到'localhost:3000',req.session.flag 的值也会从 2 开始,为什么会这样?


前一个:2
后一个:1
前两个:1
两个之后:2

谢谢!

var express = require('express');
var session = require("express-session");
var post = require('./routes/post');
var app = express();

var port = 3000;

app.use(session({secret:'fdsadfasdfdsafdsafdsafdsafd', saveUninitialized:false, resave: false}));



app.get('/', function (req, res, next) {
  console.log("********************************");
  console.log("One before: "+req.session.flag);
  req.session.flag = 1;
  console.log("One after: "+req.session.flag);
      next();
},
function (req, res, next) {
    console.log("Two before: "+req.session.flag);
  req.session.flag = 2;
  console.log("Two after: "+req.session.flag);

var html="<!DOCTYPE html><html><head><title>Hello world</title></head><body ><h1>Hello world</h1></body></html>";
  res.send(html); 
});


app.get('/three', function (req, res, next) {
    console.log("********************************");
  console.log("Three before: "+req.session.flag);
req.session.flag = 3;
console.log("Three after: "+req.session.flag);
});


app.listen(port);

【问题讨论】:

    标签: javascript node.js session express express-session


    【解决方案1】:

    会话未保存在您的 /three 端点中。这是因为您没有发回任何响应(甚至是空响应)。

    来自express-session 文档:

    Session.save()

    将会话保存回商店,替换 将内容存储在内存中(尽管存储可能会做一些事情 else--请查阅商店的文档以了解确切的行为)。

    此方法在 HTTP 响应结束时自动调用,如果 会话数据已更改(尽管可以更改此行为 在中间件构造函数中有各种选项)。因为这, 通常不需要调用此方法。

    在某些情况下调用此方法很有用,因为 例如,长期存在的请求或在 WebSockets 中。

    由于您不调用res.send(或简单地调用res.end),请求最终会超时并且会话不会被保存。

    由于带有回调的 JavaScript 的异步特性,express 不能只发送默认响应。您必须始终手动发送一份。

    【讨论】:

    • 感谢详细的解释,非常感谢
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多