Node JS 会话错误:express-session 已弃用

36

我在我的Node.js文件中有以下内容

var express = require('express');
var util = require('./lib/utility');
var partials = require('express-partials');
var bodyParser = require('body-parser');

var session = require('express-session');

/* abstracted some code */

app.use(session({
  genid: function(req) {
    return genuuid(); // use UUIDs for session IDs
  },
  secret: 'keyboard cat'
}));

当我启动服务器时,出现以下信息:

express-session deprecated undefined resave option; provide resave option server.js
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option server.js

我很难确定什么是过时的?我复制了来自https://github.com/expressjs/session的示例。

当我尝试加载页面时,我得到了以下错误:

ReferenceError: genuuid is not defined at app.use.session.genid


2
可能是[express 4.0,带有奇怪警告信息的express-session]的重复问题。 (https://dev59.com/62Af5IYBdhLWcg3wmzlL) - Musa Haidari
11个回答

48

来自 express 4.0, 带有奇怪警告信息的express-session

正如警告所说, 默认值将会改变,因此他们希望通过现在明确设置这些值,以确保当默认值在不久的将来更改时,您不会遇到意外行为。

app.use(session({
    secret: cookie_secret,
    resave: true,
    saveUninitialized: true
}));

28

您需要在某个地方定义genuuid函数。 express-session自述文件假设您已经实现了它。

关于警告,您需要在会话配置对象中明确设置resavesaveUninitialized选项。


10
“express-session”自述文件假定您已经实施了那个。如果没有特别需要UUID格式,则可以使用“require('crypto').randomBytes(48).toString('hex')”来生成唯一标识符。您也可以安装各种npm包以生成UUID。为什么他们会这样假定呢?无论如何,如果没有特别需要UUID格式,那么使用上述方法生成的内容已足够唯一。 - CrazyPyro

8

添加

{
     resave: true,
     saveUninitialized: true
}

添加到您的会话中间件


8

使用此功能,希望能够帮助您。

app.use(session({
    name : 'codeil',
    secret : 'something',
    resave :false,
    saveUninitialized: true,
    cookie : {
            maxAge:(1000 * 60 * 100)
    }      
}));

1
嗨,Ravi Chandola,欢迎。请考虑适当地格式化答案。 - Tiago Martins Peres

8

请添加以下标志:

resave: true,
saveUninitialized: true

在你的应用中 - app.use(session({}); 中,它应该能够正常工作。


那么这种方式模块本身会生成一个UUID,对吧?谢谢。 - julianm

3
app.use(session({ secret: 'anything', resave: true, saveUninitialized: true }));/

2

如果您正在使用maxAge来设置会话cookie的持续时间:

app.use(session({
  secret: '<session_secret>', 
  resave: true, 
  saveUninitialized: true,
  maxAge: 3600000   // 1 hour (in milliseconds)
})); 

1
app.use(
  session({
    name: "code",
    secret: "something",
    saveUninitialized: false,
    resave: false,
    cookie: {
      maxAge: 1000 * 60 * 100,
    },
  })
);

3
您的答案如果增加更多关于代码功能和如何帮助问题提出者的信息会更好。 - Tyler2P
2
请不要发布仅包含代码的答案。未来的读者会感激您解释为什么这个答案回答了问题,而不是从代码中推断出来。另外,由于这是一个旧问题,请解释它如何补充其他答案。 - Gert Arnold

0

您需要使用新版本的express,并在应用程序中定义genid函数,或者使用uuid软件包。


0
req.logout(function(err) {
  if (err) {
    return next(err);
  }
});

它正在百分之百地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接