Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Управление сессиями в модуле авторизации (Authentication Provider)

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
DenDroiD
phpBB 1.0.0
Сообщения: 3
Стаж: 7 лет 8 месяцев

Управление сессиями в модуле авторизации (Authentication Provider)

Сообщение DenDroiD »

Написал свой модуль авторизации - суть его в том, что на сайте пользователи распознаются через сессии php. То есть заводится сессия и в ней хранятся данные.

После того как написал Authentication Provider для интеграции существующих пользователей, столкнулся с проблемой - id сессии, то есть значение кука PHPSESSID обновляется после перезагрузки страницы на форуме. Соответсвенно при возврате на сайт, пользователь не залогинен, так как id сессии уже не тот и видимо еще и данные удалены.

Как заметил при авторизации через стандарный модуль Db - куки вообще не ставятся. А вот в когда свой добавляю модуль -сессия начинает постоянно обновляться.

В модуле равторизации у меня разумеется выполняется session_start() для доступа к сессии. Пробовал менять имя через session_name , но phpbb тогда тоже меняет имя кука и изменяет мою сессию.

Как сделать так, что бы сессия не обновлялась когда я перехожу с сайта на форум?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Управление сессиями в модуле авторизации (Authentication Provider)

Сообщение rxu »

phpBB вообще не использует сессии PHP и ничего там менять не может.
Изображение
DenDroiD
phpBB 1.0.0
Сообщения: 3
Стаж: 7 лет 8 месяцев

Re: Управление сессиями в модуле авторизации (Authentication Provider)

Сообщение DenDroiD »

сессии php может быть оно и не использует, но явно использует куки имя которых совпадает с session_name(). Поиском по коду я нашел один класс в котором ставятся session_name() и session_id() - хотя его изменение мне не помогло.

Кука сессии меняется всякий раз когда я начинаю сессию. Либо в login(), либо в validate_session(). Если в __constructor() ее начнать - то при каждом обновлении страницы будет меняться id. id меняет как я понял сразу после выполнения одной из функций.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Управление сессиями в модуле авторизации (Authentication Provider)

Сообщение Татьяна5 »

DenDroiD писал(а): что бы сессия не обновлялась когда я перехожу с сайта на форум?
Не использовать сессии php. Либо авторизовать пользователя этой же сессией ещё и на сайте.
Но в любом случае как только будет закрыта страница форума (и сайта, если доделать) - сессия слетит
DenDroiD
phpBB 1.0.0
Сообщения: 3
Стаж: 7 лет 8 месяцев

Re: Управление сессиями в модуле авторизации (Authentication Provider)

Сообщение DenDroiD »

Вообщем-то решил данную проблему при помощи следующего финта:

Код: Выделить всё

 
    /**
     * Начинает сессию php. Делает финт ушами через куку MYCOOKLOG,
     * чтобы уберечься от смены id сессий  в частности в phpbb.
     */
    private function startSession() {
        session_name("MYSESSION");
        $sessionID = \filter_input(INPUT_COOKIE, 'MYCOOKLOG');
        if ($sessionID) { // чтобы не было ошибок от phpbb при отключенных куках. (роботы соц сетей без куков)
            \session_id($sessionID);
        }
        \session_start();
        \setcookie('MYCOOKLOG', session_id(), 0, '/');
    }
То есть даже если phpbb меняет id сессии, доп кука сохраняет id и его можно восстановить перед следующим запросом от пользователя.
Ответить

Вернуться в «Для разработчиков»