在apache和websocket服务器之间使用PHP会话
我正在使用来自的websocket代码 我已经有了Mysql的自定义用户帐户,用户在登录时登录到连接到websocket的login.php。因此,我为特定用户设置会话/cookie。例如在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'
$_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是新手。