Есть ли способ в PHP получить список всех сеансов (и переменных внутри каждого) на сервере?
В принципе, у нас есть функция обслуживания, которая должна знать, какие пользователи в настоящее время зарегистрированы на сайте. Мы уже храним данные для каждого пользователя в переменной сеанса, но я надеюсь, что смогу пройти через каждый из этих сеансов и вырвать нужные мне данные.
MY PHP очень ограничен (я – разработчик .Net), но если кто-нибудь знает, возможно ли это (и как это сделать), я был бы очень благодарен. Я искал это в googled, и результаты, которые, как я нашел, имели тенденцию скрывать, что это НЕ возможно, но я нахожу это очень трудно принять.
Тем не менее, если вы не можете, вы не можете, но я думал, что мои приятели на StackOverflow могут дать мне окончательный ответ!
PHP хранит данные сеанса для каждого пользователя во временной папке на сервере. Эта папка определена в файле конфигурации php.ini в переменной session.save_path. Найдите это значение из файла php.ini или, альтернативно, создайте файл php с:
<?php echo "Session Save Path: " . ini_get( 'session.save_path');?>
как его содержимое, и откройте файл в своем браузере.
Как только вы найдете путь сохранения данных сеанса, откройте эту папку, и вы заметите довольно простую структуру. Все сеансы хранятся в формате: sess_ $ SESSIONID.
Данные сеанса сериализуются перед сохранением на диске. Таким образом, объекты, хранящиеся в файле сеанса, должны быть десериализованы перед использованием. Однако, если вы используете обычный текст, который хранится как есть, для хранения ваших данных сеанса (например, $_SESSION['userid'] = 1234
) для хранения информации о ваших пользователях, должно быть достаточно просто разобрать данные, которые вы ищете из файлов.
Еще одна вещь … Я не изучал ее, но похоже, что идентификатор сеанса, который появляется в имени файла, напрямую соответствует, например, имени файла cookie PHPSESSID, хранящегося на компьютере пользователя. Таким образом, с учетом этого может быть возможно прокрутить файлы во временном каталоге сеанса, получить все значения SESSIONID, установить текущий идентификатор сеанса с помощью session_id($SESSIONID)
, начать сеанс с session_start()
и получить доступ данные, которые вам нужны через PHP, без необходимости самостоятельно анализировать сами файлы содержимого. Может ли кто-нибудь подтвердить, возможно ли это?
Изменить: скорректированный пост в соответствии с комментарием Итай.
Вот более краткий способ получить список сеансов через сохраненные файлы:
<?php print_r(scandir(session_save_path())); ?>
Это даст вам данные для всех сеансов, хранится в массиве и индексируется идентификатором сеанса:
<?php $allSessions = []; $sessionNames = scandir(session_save_path()); foreach($sessionNames as $sessionName) { $sessionName = str_replace("sess_","",$sessionName); if(strpos($sessionName,".") === false) { //This skips temp files that aren't sessions session_id($sessionName); session_start(); $allSessions[$sessionName] = $_SESSION; session_abort(); } } print_r($allSessions);