Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在apache和websocket服务器之间使用PHP会话_Php_Session_Websocket_Chat - Fatal编程技术网

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

在apache和websocket服务器之间使用PHP会话,php,session,websocket,chat,Php,Session,Websocket,Chat,我正在使用来自的websocket代码 我已经有了Mysql的自定义用户帐户,用户在登录时登录到连接到websocket的login.php。因此,我为特定用户设置会话/cookie。例如 $_SESSION["user"] = 'xyz';//User is created. 问题是当我尝试使用会话id为的$\u会话时。我无法获取$\u会话值。我是在server.php中完成这项工作的,它应该使用php server.php命令运行。我尝试下面的代码 session_id("lsjdfjl'

我正在使用来自的websocket代码

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

$_SESSION["user"] = 'xyz';//User is created.
问题是当我尝试使用会话id为的$\u会话时。我无法获取$\u会话值。我是在server.php中完成这项工作的,它应该使用php server.php命令运行。我尝试下面的代码

session_id("lsjdfjl');
@session_start();
$user = $_SESSION["user"];
我收到一条错误消息,说是未定义索引


是否有其他方法可以将上述Websocket服务器与自定义用户数据库相结合,并为不同的登录用户创建单独的聊天室。例如FB聊天/gmail聊天系统。

您不能使用同一会话

您根本不能将会话用于websocket连接

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


您需要了解基于令牌的websocket身份验证。以下是一些信息,您不能使用相同的会话

您根本不能将会话用于websocket连接

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


您需要了解基于令牌的websocket身份验证。这里有一些信息可以从

开始。公认的答案并不准确

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

我也将在这里为后代发布代码和图像,以避免链接腐烂:

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);
                }
            });
        }
    }
}
结果:


公认的答案并不十分准确

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

我也将在这里为后代发布代码和图像,以避免链接腐烂:

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);
                }
            });
        }
    }
}
结果:


我无法在server.php中的wsOnMessage函数中使用**GET**方法。你能告诉我怎么使用GET吗。哦,我是websocket新手。我不能在server.php中的wsOnMessage函数中使用**GET**方法。你能告诉我怎么使用GET吗。哦,我对websocket是新手。