Express-session 和 express-socket.io-session 在 angular2 / typescript 环境中不起作用

Posted

技术标签:

【中文标题】Express-session 和 express-socket.io-session 在 angular2 / typescript 环境中不起作用【英文标题】:Express-session and express-socket.io-session not working in angular2 / typescript environment 【发布时间】:2017-04-10 09:45:11 【问题描述】:

我有一个 script.js 设置服务器,如下所示:

var io_session = require("express-socket.io-session");

var e_session = require("express-session")(
    secret: "a-secret",
    resave: true,
    saveUninitialized: true
);

(...)

//this block is the last "io.use" before the socket logic (io.on("connection"))    
io.use(io_session(e_session,
    autoSave: true
));

在我的 typescript / angular2 前端环境中使用以下种子 https://github.com/NathanWalker/angular2-seed-advanced 我使用 Http 类在多个服务/组件中执行 http 请求。

但是,当我尝试再次向服务器请求我尝试记录用户会话的某些内容时,没有记录任何内容...我真的不知道为什么会发生这种情况,因为不仅用户的会话没有保留,但会话也没有从 http 共享到套接字层系统(显然,如果没有创建它,它也不会被共享)。

有人知道这里可能出了什么问题吗?如果需要,我可以提供更多信息,但我真的不知道缺少什么。

【问题讨论】:

您好,请用更多细节更新您的问题,例如更完整的代码行和围绕问题的概述。如果它更适合您,请尝试 jsfiddle... @dscastro 这很难,因为 angular2 种子的上下文已经很复杂了...... 这为我解决了:***.com/questions/25532692/… 【参考方案1】:

您可以使用 Express 轻松运行 socket.io。只需调用 socket.io 的 listen 方法并将 Express Session 作为中间件传递给它(假设您将所有会话存储在 FileSystem 中而不是 Redis 中)。我已经复制了您的代码,如下所示:

    var e_session = require("express-session"); 
    var io_session = require("socket.io")(server); 
    //Storing sessions in file system
    var sessionFileStore = require('session-file-store')(Session);

    //Express-Sessions as middleware
    var e_sessionMiddleware = e_session(
        store: new sessionFileStore( path: './project-x/sessions' ),
        secret: 'pass',     resave: true,
        saveUninitialized: true 
    );
    //Use of Express-Session as Middleware    
    io_session.use(function(socket, next) 
       e_sessionMiddleware(socket.handshake, , next); 
    );

    //Socket Io session and express sessions are now same 
    io_session.on("connection", function(socket) 
       socket.emit(socket.handshake.session);
    );

希望对您有所帮助!谢谢!

【讨论】:

你觉得答案有用吗? 还是不行。我认为问题出在 Angular 的 HTTP 对象上,而不是在服务器上。当我在角度上刷新页面时,套接字不会持续存在......

以上是关于Express-session 和 express-socket.io-session 在 angular2 / typescript 环境中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

express4里要单独安装cookie-parser和express-session

node的cookie-parser和express-session

与 socket.io 一起使用时 express-session 未设置会话 cookie

页面未使用 express-session 和护照 nodejs 正确重定向

使用 Passport.js、express-session 和 express-mysql-session 进行用户身份验证

express-session整理