Сеансы PHP — где они хранятся и как изменить другой сеанс?

#php #session

#php #сеанс

Вопрос:

Если пользователь является администратором, я бы хотел, чтобы администраторы имели возможность вручную выходить из системы пользователей. Для этого потребуется изменить и / или уничтожить сеанс другого пользователя. Возможно ли это?

Ответ №1:

Вы можете использовать session_save_path для определения пути сохранения текущего сеанса. Или вы используете базу данных в качестве хранилища сеансов. Я думаю, что это был бы более простой способ удалить другой сеанс пользователя: session_set_save_handler.

Комментарии:

1. Если я вызову session_save_path, как я могу использовать это для удаления или изменения сеанса?

2. Вам нужно будет знать идентификатор сеанса пользователя для выхода из системы, чтобы удалить соответствующий файл. По умолчанию имя файла сеанса пользователя sess_{$usersSessionId} равно . Затем вы можете разорвать связь с файлом. Но, конечно, вам понадобится доступ на запись в папку сеанса. На мой взгляд, более простой способ — сохранить информацию о сеансе в базе данных, а затем иметь столбец, содержащий идентификатор пользователя, чтобы легко удалить сеанс.

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

4. Есть ли способ получить сообщение об ошибке из этого, если ошибки отключены? Я делаю: unlink(session_save_path().’sess_’.$ row[‘session’]); — это не останавливает скрипт, но и не прерывает сеанс…

5. Я предполагаю, что вы используете базу данных. Так почему бы не использовать флаг logged_in , который после входа пользователя устанавливается 1 равным и при каждом обновлении страницы проверяется, установлен ли он равным 0 (администратором), затем удалите сеанс пользователей ( $_SESSION = array(); ) и, если пользователь выходит из системы, вручную установите logged_in 0 тоже.

Ответ №2:

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

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

Ответ №3:

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

Ответ №4:

Вы можете прочитать об обработчиках сохранения для php

По умолчанию сеанс сохраняется в файлах (как определено переменной php.ini session.save_handler .

Местоположение определяется session.save_path .

Если вы хотите сохранить свои сеансы по-другому, вы можете использовать session_set_save_handler и сохранять их по своему усмотрению. Возможно, в базе данных для многосерверной системы.