节点 JS 会话错误:不推荐使用 express-session

Posted

技术标签:

【中文标题】节点 JS 会话错误:不推荐使用 express-session【英文标题】:Node JS session error: express-session deprecated 【发布时间】:2015-05-04 13:27:01 【问题描述】:

我的节点 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 未在 app.use.session.genid 中定义

【问题讨论】:

express 4.0 , express-session with odd warning message的可能重复 【参考方案1】:

来自express 4.0 , express-session with odd warning message

正如警告所说,默认值会发生变化,因此他们希望通过现在明确设置值来确保在默认值发生变化时(在不久的将来)不会遇到意外行为。

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

【讨论】:

【参考方案2】:

您必须在某处定义genuuid 函数。 express-session 自述文件假设你已经实现了。

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

【讨论】:

“快速会话自述文件假设您已经实现了它。”为什么他们会假设那样!?那为什么不叫它 write_your_uuid_func_here() 呢?无论如何,如果您没有特定的理由需要 UUID 格式,这确实很好:require('crypto').randomBytes(48).toString('hex'); 您还可以安装各种 npm 包来执行 UUID。【参考方案3】:

添加这些标志-

resave: true,
saveUninitialized: true

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

【讨论】:

那么这样模块本身会生成一个 UUID 对吗?谢谢【参考方案4】:

用这个,希望对你有帮助

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

【讨论】:

嗨,拉维·钱多拉,欢迎您。请考虑正确格式化答案。【参考方案5】:

添加


     resave: true,
     saveUninitialized: true

到您的会话中间件

【讨论】:

【参考方案6】:
app.use(session( secret: 'anything', resave: true, saveUninitialized: true ));/

【讨论】:

【参考方案7】:

如果您使用maxAge 作为会话 cookie 持续时间:

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

【讨论】:

【参考方案8】:

您必须使用新版本的 express 并在应用中的某处定义 genid 函数或使用 uuid 改为打包

【讨论】:

【参考方案9】:

这是一个弃用警告。这意味着将不支持节点模块快速会话。

【讨论】:

这是不正确且具有误导性的。 express-session 包本身并未被弃用,但 OP 使用的某些方面已被弃用(或将被弃用)。

以上是关于节点 JS 会话错误:不推荐使用 express-session的主要内容,如果未能解决你的问题,请参考以下文章

存在 Express 会话问题的节点

没有 express.js 的 Socket.io 会话?

Express中的graphql错误,节点js

每次刷新或访问页面时,Node js express-session都会创建新的会话ID

使用 Express 和 Node,如何跨子域/主机头维护会话

express.session.MemoryStore 不返回会话?