节点JS会话错误:不推荐使用快速会话

Ari*_*osh 9 javascript session node.js express

我的节点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'
}));
Run Code Online (Sandbox Code Playgroud)

当我启动服务器时,我得到了

express-session deprecated undefined resave option; provide resave option server.js
express-session deprecated undefined saveUninitialized option; provide saveUninitialized option server.js
Run Code Online (Sandbox Code Playgroud)

我很难搞清楚什么是弃用的?我从https://github.com/expressjs/session复制了这个例子

当我尝试加载页面时,我得到:

ReferenceError:app.use.session.genid中未定义genuuid

msc*_*dex 15

你必须在genuuid某处定义函数.该express-session自述是假设你已经实施了.

关于警告,您需要在会话配置对象中显式设置resavesaveUninitialized选项.

  • "快递会自述文件假设你已经实现了这一点." 为什么在这个世界上他们会假设*那个!?那么为什么不称之为`write_your_uuid_func_here()`?无论如何,如果你没有特定的理由*需要*UUID格式,这确实很独特:`require('crypto').randomBytes(48).toString('hex');`你也可以安装各种`npm`包来做UUID. (5认同)

小智 8

添加这些标志-

resave: true,
saveUninitialized: true
Run Code Online (Sandbox Code Playgroud)

在您的内部 - app.use(session({}); 它应该可以正常工作。


小智 8

添加

{
     resave: true,
     saveUninitialized: true
}
Run Code Online (Sandbox Code Playgroud)

到你的会话中间件


小智 7

使用这个,希望它会有所帮助

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


Dar*_*now 6

express 4.0开始,带有奇怪警告消息的express-session

如警告所述,默认值将更改,因此它们希望通过立即显式设置值来确保当默认值更改时(不久的将来),您不会遇到意外行为。

app.use(session({
    secret: cookie_secret,
    resave: true,
    saveUninitialized: true
}));
Run Code Online (Sandbox Code Playgroud)