在 apache 和 websocket 服务器之间使用 PHP 会话

Using PHP session between apache and websocket server

我正在使用来自 https://github.com/Flynsarmy/PHPWebSocket-Chat

的 websocket 代码

我已经有了 Mysql 的自定义用户帐户,用户在 login.php 登录并连接到 websocket。因此,我为特定用户设置了 session/cookie。例如

$_SESSION["user"] = 'xyz';//User is created.

问题是当我尝试使用 $_SESSION 甚至 session_id() 时。我未能获得 $_SESSION 值。我在 server.php 中这样做,应该是 运行 php server.php命令。我尝试下面的代码。

session_id("lsjdfjl');
@session_start();
$user = $_SESSION["user"];

我收到错误消息说 未定义索引 ...

是否有任何替代方法可以将上述 Websocket 服务器与自定义用户数据库结合起来,并为不同的登录用户创建单独的聊天室。比如FBchat/gmail聊天系统

您不能使用相同的会话。

您根本无法使用 session 进行 websocket 连接。

Websocket 连接是一个单独的连接,在不同的端口上,因此您的主会话在那里不可用。

您需要阅读有关基于令牌的 websocket 身份验证的信息。这是从 https://auth0.com/blog/2014/01/15/auth-with-socket-io/

开始的一些信息

接受的答案并不准确。

您可以使用相同的会话数据 - 请参阅此处:

为了post真实性并避免link rot:

,我也会在这里post编码和图像
var cookie = require('cookie');
var fs = require('fs');
var phpUnserialize = require('php-unserialize');

//This should point to your php session directory.
//My php.ini says session.save_path = "${US_ROOTF}/tmp"
var SESS_PATH = "C:/SomeDirectory/WhereYourPHPIs/tmp/";

io.on('connection', function(socket) {
    //I just check if cookies are a string - may be better method
    if(typeof socket.handshake.headers.cookie === "string") {
        var sid = cookie.parse(socket.handshake.headers.cookie);
        if(typeof sid.PHPSESSID === "undefined") {
          console.log("Undefined PHPSESSID");
        }
        else {
            console.log("PHP Session ID: " + sid.PHPSESSID);
            fs.readFile(SESS_PATH + "sess_" + sid.PHPSESSID, 'utf-8', function(err,data) {
                if(!err) {
                    console.log("Session Data:");
                    var sd = phpUnserialize.unserializeSession(data);
                    console.log(sd);
                }
                else {
                   console.log(err);
                }
            });
        }
    }
}

结果: