Я использую код веб-сокета из https://github.com/Flynsarmy/PHPWebSocket-Chat
У меня уже есть моя учетная запись пользователя Mysql, где пользователь входит в систему по адресу login.php подключен к веб-сокету. Таким образом я установил сессию / cookie для конкретного пользователя. Для примера
$_SESSION["user"] = 'xyz';//User is created.
Вопрос в том, когда я пытаюсь использовать $ _SESSION даже с идентификатор сессии(). Мне не удалось получить $ _SESSION ценности. Я делаю это в server.php который должен работать с php server.php команда. Я попробую код ниже.
session_id("lsjdfjl');
@session_start();
$user = $_SESSION["user"];
И я получаю сообщение об ошибке, говорящее неопределенный индекс …
Есть ли альтернативный способ объединить вышеуказанный сервер Websocket с пользовательской пользовательской базой данных и создать отдельную чат-комнату для разных вошедших пользователей. Например, FB чат / Gmail чат система.
Вы не можете использовать тот же сеанс.
Вы вообще не можете использовать сессию для соединения через веб-сокет.
Соединение Websocket — это отдельное соединение на другом порту, поэтому ваш основной сеанс там недоступен.
Вам нужно прочитать об аутентификации на основе токенов на веб-сокете. Вот некоторая информация, чтобы начать с https://auth0.com/blog/2014/01/15/auth-with-socket-io/
Принятый ответ не совсем точен.
Вы можете использовать те же данные сеанса — смотрите здесь:
https://stackoverflow.com/a/49802049/1274820
Я также опубликую здесь код и изображение для потомков и во избежание гниения ссылок:
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);
}
});
}
}
}
Результаты: