Использование PHP-сессии между apache и сервером websocket

Я использую код веб-сокета из 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 чат система.

1

Решение

Вы не можете использовать тот же сеанс.

Вы вообще не можете использовать сессию для соединения через веб-сокет.

Соединение Websocket — это отдельное соединение на другом порту, поэтому ваш основной сеанс там недоступен.

Вам нужно прочитать об аутентификации на основе токенов на веб-сокете. Вот некоторая информация, чтобы начать с https://auth0.com/blog/2014/01/15/auth-with-socket-io/

1

Другие решения

Принятый ответ не совсем точен.

Вы можете использовать те же данные сеанса — смотрите здесь:

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);
}
});
}
}
}

Результаты:

Результаты

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector