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 进行用户身份验证