gpt4 book ai didi

node.js - 无法从 session 存储中获取 session

转载 作者:搜寻专家 更新时间:2023-10-31 23:48:28 25 4
gpt4 key购买 nike

我已经阅读并复制粘贴了很多关于将 session 与 socket.io、express 和 session 存储一起使用的示例。但是,每次我调用 sessionStore.get()(或 sessionStore.load())时,我得到的都是 undefined。为什么?

这是我的代码(简化版):

var app = require('express')(),
session = require('session'),
MongoStore = require('connect-mongostore')(session);

app.use(session({
store: new MongoStore({ 'db': 'sessions' });
}));

io.use(function(socket, next) {
var req = socket.request,
reqCookie = cookie.parse(req.headers.cookie),
sessid = reqCookie['connect.sid']; // == actual session ID

sessionStore.get(sessid, function(err, session) {
err // == undefined
session // == undefined
});
next() ;
});

我也尝试使用 session.MemoryStore 代替 connect-mongostore,结果相同。我修改了node_modules/express-session/session/memory.js 尝试注销 sessionStore 中的 session :

MemoryStore.prototype.get = function(sid, fn){
var self = this;
console.log(self.sessions); // Output: {}

我是 session 等方面的新手,所以感谢您的耐心等待。

更新:我已经在两个不同的系统和网络上尝试了代码,但我仍然得到相同的结果。

最佳答案

所以我终于想出了解决办法。事实证明,从 socket ios socket.request.headers.cookie 返回的 session ID 与从 nodejs 的 req.sessionID 返回的 session ID 并不完全相同。

以下是我在这两种情况下获取 session ID 的方式,以及它们返回的示例。

普通的http请求

app.get('/', function(req, res) {
req.sessionID; // == LMKJxTssmDgf8IxwijbC9G6LtDBuTQWX

});

套接字.io

io.use(function(socket, next) {

var req = socket.request;

if (req.headers.cookie) {
req.cookie = cookie.parse(req.headers.cookie);

req.cookie['express.sid']; // == s:LMKJxTssmDgf8IxwijbC9G6LtDBuTQWX.ApVkBxAEf4o3Pdgo0PWDRHi+GvBaSdcK7q1pO4xslZ0

如您所见, session ID 在这两种情况下都存在,我们只需要删除 socket.io 给我们的那个上的一些内容。 解决方案: req.cookie['express.sid'].split('.')[0].split(':')[1];.

关于node.js - 无法从 session 存储中获取 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24887175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com