Подтвердить что ты не робот

Заполнение всех сеансов сервера в PHP

Есть ли способ в PHP получить список всех сеансов (и переменных внутри каждого) на сервере?

В принципе, у нас есть функция обслуживания, которая должна знать, какие пользователи в настоящее время зарегистрированы на сайте. Мы уже храним данные для каждого пользователя в переменной сеанса, но я надеюсь, что смогу пройти через каждый из этих сеансов и вырвать нужные мне данные.

MY PHP очень ограничен (я - разработчик .Net), но если кто-нибудь знает, возможно ли это (и как это сделать), я был бы очень благодарен. Я искал это, и результаты, которые я нашел, склонны обвинять в том, что это НЕ ВОЗМОЖНО, но я нахожу это очень трудным для принятия.

Тем не менее, если вы не можете этого не сделать, но я думал, что мои приятели в StackOverflow могут дать мне окончательный ответ!

4b9b3361

Ответ 1

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 без необходимости самостоятельно анализировать файлы содержимого. Может ли кто-нибудь подтвердить, возможно ли это?

Изменить: Скорректированный пост в соответствии с комментарием Itay.

Ответ 2

Вот более краткий способ получить список сеансов через сохраненные файлы:

<?php
print_r(scandir(session_save_path()));
?>

Ответ 3

Это даст вам данные для всех сеансов, хранится в массиве и индексируется идентификатором сеанса:

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

Ответ 4

Я использовал метод @mgroat в вызове ajax, но в заголовке ответа HTTP есть проблема, что заголовок Set-Cookie появляется несколько раз, а jQuery сообщает об ошибке:

Заголовок Set-Cookie игнорируется в ответе от URL: mysite.com/admin/ajax/main_ajax. Длина файла cookie должна быть не более 4096 символов.

Решение состоит в том, чтобы добавить header_remove("Set-Cookie") сразу после session_start().