我在服务器10.0.4.18上的端口8020上运行了node.js 4.0上的websocket.我使用socket.io v1.3,express和express-session实现了我的websocket.
项目定义
我需要能够在socket.io中为从PHP应用程序连接到它的每个用户创建一个会话.在用户发送第一个HTTP请求之后,我将使用将从PHP传递到socket.io以及HTTP请求的令牌对它们进行身份验证.
用户通过身份验证后,我需要在socket.io会话中保存一些个人数据,以便以后重用.每次用户刷新PHP应用程序时,socket.io都需要知道已创建的会话数据.
问题
每次用户重新加载/刷新PHP页面"他/她从哪里连接"时,会话数据都会丢失.服务器无法知道该连接属于先前创建的会话XYZ.
我不确定如何在PHP和node.js之间创建握手,其中两个服务器可以交换唯一数据以将socket.io会话绑定到.
仔细看看这个问题
我在浏览器中打开了这个链接https://10.0.4.18:8020/set/MikeA."这根据路由代码直接从node.js为我创建了一个会话"
然后我使用PHP连接到websocket,现在我可以看到会话没有问题!我能够在浏览器中打开多个选项卡,并且会按预期进行相同的会话.
它这次工作的原因是因为网址https://10.0.4.18:8020/set/MikeA建立了一个会话并将其绑定在我的浏览器和会话之间,从那里我能够从socket读取/写入我的会话.我使用express-socket.io-session包https://www.npmjs.com/package/express-socket.io-session.
但是如果我不手动使用url创建会话,则会话仅适用于一个页面加载.每次重新加载页面时,会话都会被破坏,就像它从未存在过一样!
题
当从socket.io连接时,我需要通过https://10.0.4.18:8020/set/MikeA连接到websocket时开发相同的行为.
如何在PHP服务器和socket.io之间建立握手,其中两个服务器可以在每次重新加载PHP页面或打开新的浏览器选项卡时将会话数据绑定到正确的用户?
这是我的websocket代码
var app = require('express')(),
https = require('https'),
fs = require('fs'),
session = require('express-session'),
sharedsession = require("express-socket.io-session"),
fileStore = require('session-file-store')(session),
base64url = require('base64url'),
cookieParser = require("cookie-parser"),
env = require('./modules/config');
var server = https.createServer(
{
key: fs.readFileSync('certs/key.pem'),
cert: fs.readFileSync('certs/cert.pem')
}, app).listen(env.socket.port, env.socket.host, function () {
console.log('\033[2J');
console.log('Websocket is running at https://%s:%s', server.address().address, server.address().port);
});
var io …Run Code Online (Sandbox Code Playgroud)