Написал свой модуль авторизации - суть его в том, что на сайте пользователи распознаются через сессии php. То есть заводится сессия и в ней хранятся данные.
После того как написал Authentication Provider для интеграции существующих пользователей, столкнулся с проблемой - id сессии, то есть значение кука PHPSESSID обновляется после перезагрузки страницы на форуме. Соответсвенно при возврате на сайт, пользователь не залогинен, так как id сессии уже не тот и видимо еще и данные удалены.
Как заметил при авторизации через стандарный модуль Db - куки вообще не ставятся. А вот в когда свой добавляю модуль -сессия начинает постоянно обновляться.
В модуле равторизации у меня разумеется выполняется session_start() для доступа к сессии. Пробовал менять имя через session_name , но phpbb тогда тоже меняет имя кука и изменяет мою сессию.
Как сделать так, что бы сессия не обновлялась когда я перехожу с сайта на форум?
Управление сессиями в модуле авторизации (Authentication Provider)
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 8 лет 9 месяцев
-
- phpBB Guru
- Сообщения: 16947
- Стаж: 18 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 549 раз
- Поблагодарили: 1700 раз
Re: Управление сессиями в модуле авторизации (Authentication Provider)
phpBB вообще не использует сессии PHP и ничего там менять не может.
-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 8 лет 9 месяцев
Re: Управление сессиями в модуле авторизации (Authentication Provider)
сессии php может быть оно и не использует, но явно использует куки имя которых совпадает с session_name(). Поиском по коду я нашел один класс в котором ставятся session_name() и session_id() - хотя его изменение мне не помогло.
Кука сессии меняется всякий раз когда я начинаю сессию. Либо в login(), либо в validate_session(). Если в __constructor() ее начнать - то при каждом обновлении страницы будет меняться id. id меняет как я понял сразу после выполнения одной из функций.
Кука сессии меняется всякий раз когда я начинаю сессию. Либо в login(), либо в validate_session(). Если в __constructor() ее начнать - то при каждом обновлении страницы будет меняться id. id меняет как я понял сразу после выполнения одной из функций.
-
- Поддержка
- Сообщения: 12751
- Стаж: 13 лет 8 месяцев
- Благодарил (а): 159 раз
- Поблагодарили: 2276 раз
Re: Управление сессиями в модуле авторизации (Authentication Provider)
Не использовать сессии php. Либо авторизовать пользователя этой же сессией ещё и на сайте.
Но в любом случае как только будет закрыта страница форума (и сайта, если доделать) - сессия слетит
-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 8 лет 9 месяцев
Re: Управление сессиями в модуле авторизации (Authentication Provider)
Вообщем-то решил данную проблему при помощи следующего финта:
То есть даже если phpbb меняет id сессии, доп кука сохраняет id и его можно восстановить перед следующим запросом от пользователя.
Код: Выделить всё
/**
* Начинает сессию 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, '/');
}