Разлогинивает рандомно + доступ к логину за пределами форума

Проблемы с установкой или работой phpBB 3.2.x? Получите помощь здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 31.05.2019 19:30

Дано: сайт с форумом 3.2.7 в подкаталоге /forum.
Нужно: чтобы на главной и прочих страницах сайта юзеры оставались залогиненными (в том смысле, что скриптам сайта нужно знать, что это за юзер).

Сделано так:

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

require_once(dirname(__file__) . '/forum/common.php');
$user->session_begin();
$auth->acl($user->data);
$user->setup();
После этого появляется доступ к объекту $user, в частности $user->data['is_registered'], $user->data['username'] и пр.

Всё работает, но проблема: юзеры жалуются (и у меня пару раз было) что рандомно разлогинивает с форума.
Закономерность точно не выяснена. Может неделями не разлогинивать, а может за день два раза.
От устройства и браузера не зависит.
Логин, понятно, с галочкой "запомнить меня".
Кажется, как-то связано с параллельным открытием страниц форума и других страниц сайта в разных вкладках.

Настройки куки:
Домен куки: .mydomain.com
Имя куки: phpbb3_304
Путь куки: /
Безопасные cookie [ https ]: Выкл.

Настройки безопасности и куки: все "опасные" (все возможные проверки отключены).
А именно:
Безопасные куки - выкл.
Включить функцию «Запомнить меня»: Да
Время действия автоматического входа: 0
Проверка IP-адреса сессии: Нет
Проверка браузера: Нет
Проверка заголовка X_FORWARDED_FOR: Нет
Проверять рефёрер: Проверять только хост
Проверять сертификат загрузки: Нет
Проверять IP-адрес по чёрному списку DNS (DNS Blackhole List): Нет

Я что-то делаю не так? Может, я делаю не всё, что нужно?
Или проблема в чём-то другом?

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4188
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 109 раз
Поблагодарили: 443 раза

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Siava » 31.05.2019 20:21

Меня подобное преследует со времён обновления с двойки на 3.1. Все условия похожие, кроме того использую https (ещё с двойки). И там автовход держало годами, тут же хз что. Тоже рандом, но есть кое-какие закономерности. Например любые ajax-чаты только лишь способствуют вылетам.. но тоже рандомно.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14531
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1556 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 31.05.2019 20:58

Подозреваю, что периодически происходит очистка таблицы сессий, и всё.
Изображение

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 7:00

rxu писал(а):
31.05.2019 20:58
Подозреваю, что периодически происходит очистка таблицы сессий, и всё.
:shock:
А как так-то? Кто её чистит? Как вообще узнать?
У меня там 11+ тыс. записей, самый ранний session_start от 4.07.2018 г.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14531
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 348 раз
Поблагодарили: 1556 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение rxu » 01.06.2019 7:26

BadBlock писал(а):
01.06.2019 7:00
Кто её чистит?
Крон.
BadBlock писал(а):
01.06.2019 7:00
Как вообще узнать?
См. phpbb/session.php function session_gc().
Изображение

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 7:38

Думаешь, можно попробовать увеличить длину сессии? Сейчас стоит 1 час.
Но блин, даже если сессия грохнута, автологин-то по "Запомнить меня" должен сработать - sesion_keys вроде не чистится вовсе.

Отправлено спустя 35 минут 38 секунд:
Так, вот докладывают, что может проявляться таким образом: утром человек открывает форум, и не обязательно открывает главную страницу сайта и форум параллельно, а может просто из сохраненных закладок открывать в нескольких вкладках браузера несколько подфорумов. Сразу, параллельно. Первая вкладка открывается нормально, в друх других авторизация слетает.

Может, тут собака порылась? Сразу на старте несколько параллельных запросов?
Например, такой сценарий:
К моменту, когда человек утром проснулся, его предыдущая сессия уже слетела (её длительность бездействия 1 час), и первая достучавшаяся до сервера вкладка логинит юзера, стартует новую сессию, отправляет в браузер новую сессионную куку и привязывает к ней логин.
Но параллельно в соседних вкладках уже запрошены страницы с тем же автологином, но ещё со старой сессионной кукой.
Форум на втором запросе видит, что от юзера пришла неверная комбинация кук, и от испуга сбрасывает залогиненность. :D
Может такое быть?

Надо ещё подумать.
Я сейчас у себя поднял время жизни сессии с 1 часа до 2 суток, посмотрю, поможет ли, и что будет с нагрузкой на сервер БД.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11491
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2579 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 01.06.2019 12:07

BadBlock писал(а):
01.06.2019 7:00
У меня там 11+ тыс. записей, самый ранний session_start от 4.07.2018 г.
Ну это ненормально. Здесь на данный момент всего 130 сессий. Для начала очистите таблицы _sessions и _session_keys
BadBlock писал(а):
01.06.2019 8:14
от юзера пришла неверная комбинация кук
Не может прийти какая-то другая. Куки хранятся для всего сайта (ну или папки сайта, смотря как настроены в АCP), а не для каждой страницы. Покажите, как у вас настроены куки.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 12:59

Sheer писал(а):
01.06.2019 12:07
Ну это ненормально. Здесь на данный момент всего 130 сессий. Для начала очистите таблицы _sessions и _session_keys
Не факт. У меня активных пользователей в онлайне обычно 150-300 — больше, чем тут.
Тут 122 посетителя за сегодня, а у меня уже 3277.
В прошлом году таблицы уже пробовал очищать, просто так не хочу. Это не помогает.
Не может прийти какая-то другая. Куки хранятся для всего сайта (ну или папки сайта, смотря как настроены в АCP), а не для каждой страницы.
РАзумеется,, куки хранятся для всего сайта, а не для каждой страницы.
Именно поэтому я и написал свою теорию: на сайт от юзера полетели 2-3 почти одновременных запроса. Параллельно. С одинаковыми куками.
Один из них, видимо, долетает первее других.
В ответ на этот первый запрос сервер увидел, что сессии нет, залогинил юзера, стартовал сессию и установил новую сессионную куку.
И тут же на сервер прилетают ещё два запроса, тоже с кукой автологина, но со старой, недействительной сессионной кукой — такой же, как у первого запроса.
Но в этот момент сессия уже есть, она уже активна,так что старая сессионная кука более не валидна.
Вполне вероятно, это можно расценить как нарушение по безопасности и как следствие, разлогинить юзера.

Если после некоторого отсутствия вызывать не 2-3 страницы форума сразу, а только одну, разлогинивания не происходит.
По крайней мере, не припомню.
Поэтому предполагаю, что вот так.
Покажите, как у вас настроены куки.
В заглавном посте сразу написал.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11491
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2579 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 01.06.2019 13:20

BadBlock писал(а):
01.06.2019 12:59
С одинаковыми куками
Куки всегда одинаковые. И пока вы их не удалите в браузере, всегда будут оставаться одними и теми-же
BadBlock писал(а):
01.06.2019 12:59
стартовал сессию и установил новую сессионную куку.
Похоже вы не понимаете, как работают куки. При переходе со страницы на другую, обновляется сессия, если она стартовала, при этом данные сессии сверяются с данными, полученными от куки, как-то так вкратце.
"Выбрасывать" будет тогда, когда данные, полученные от кук _k _sid и _u не будут совпадать со значениями, хранящимися в таблицах _sessions и _sessions_keys
Еще раз. Для чистоты эксперимента очистите эти таблицы. Это ничем не грозит.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11491
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2579 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 01.06.2019 13:33

При переходе со страницы на страницу и при открытии страницы на другой вкладке или окне браузера эти значения должны оставаться неизменными
coockies.jpg
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 13:34

При переходе со страницы на другую, обновляется сессия, если она стартовала, при этом данные сессии сверяются с данными, полученными от куки, как-то так вкратце.
Н-да. Тяжело заходит.
Ок, попробуем по-другому: а если сессия ещё не стартовала, что происходит?
Вот пришёл запрос от юзера с куками _k, _sid и _u, форум проверяет, а сессия уже протухла и удалена (такого sid в таблице нет) — что происходит?

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11491
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2579 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 01.06.2019 13:40

BadBlock писал(а):
01.06.2019 13:34
а если сессия ещё не стартовала, что происходит?
Ничего. Она не может не стартовать, ибо каждая страница начинается с кода

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

// Start session management
$user->session_begin();
BadBlock писал(а):
01.06.2019 13:34
Я для чистоты эксперимента уже очищал
Очистите еще раз. Обе. Удалите куки, авторизуйтесь заново и смотрите в консоли браузера, что происходит с данными при переходах. Зарегистрируйте тест-юзера и и сообщите данные для авторизации, иначе :dontknow

Отправлено спустя 2 минуты 32 секунды:
BadBlock писал(а):
01.06.2019 13:34
а сессия уже протухла и удалена (такого sid в таблице нет) — что происходит?
Лог аут. Авторизуйся заново.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 17:51

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

Нет в моём описании никакого "перехода со страницы на страницу".
Вы понимаете меня? Попробуйте сосредоточиться. :)
Юзер после долгого отсутствия на форуме открывает сразу 2 его страницы. Понимаете? Сразу, параллельно.
Первая страница создаёт сессию и автозалогинивает юзера. Она генерирует новый sid и ключ.
Вторая тут же разлогинивает, потому что пришли старые sid и ключ, которые уже неверны.

Попробую ещё сильнее разжевать мысль.
После долгого отсутствия (читай "сессия протухла") от юзера полетели на сервер 2 (два) почти одновременных запроса, оба с одинаковыми, прежними значениями сессии и ключа — sid1 и k1.
В ответ на первый запрос форум видит, что сессии sid1 в БД нет, но от клиента прилетел валидный ключ автологина k1.
Что делает форум:
(1) стартует новую залогиненную сессию с неким идентификатором sid2.
(2) регенерирует новый ключ автологина k2,
(3) отправляет эти данные обратно в куках как часть HTTP-респонса.

И тут на сервер долетает от того же клиента второй запрос, и у него в куках всё ещё sid1 и k1.
Форум видит, что сессии с идентификатором sid1 нет, при этом ключ k1 уже не валиден.
И форум стартует новую гостевую сессию sid3.

Последующие страницы уже открываются с sid3 — то есть, под гостевой сессией. Ведь страница с sid3 вернулась последней и переписала (стёрла) в браузере куки залогиненной сессии sid2 и k2. С точки зрения юзера его "разлогинило". С этого момента юзеру надо залогиниться руками.

Полагаю, происходит как-то так.
Очистите еще раз. Обе.
Ок, ок, очистил, и даже имя куки сменил — ради всеобщего мира и процветания.
Зарегистрируйте тест-юзера и и сообщите данные для авторизации, иначе :dontknow
Спасибо, мне не нужна помощь сейчас.
Потому что я подозреваю, что нашёл изъян в механизме логина и думаю, так ли это, и можно ли его исправить.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11491
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2579 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение Sheer » 01.06.2019 19:39

Я сейчас авторизован на этой конференции сразу с двух разных устройств и с двух разных браузерах. Куки соответственно разные. И просматриваю две разные страницы. Могу одну и ту же. И почему-то меня "не разлогинивает". Знаете почему? Потому что одновременно для одного и того же пользователя может создаваться несколько сессий с разными ключами автовхода. Попробуйте сосредоточиться и понять это.
BadBlock писал(а):
01.06.2019 17:51
мне не нужна помощь
Тогда зачем вы все это тут пишете? Мысли вслух? :?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Разлогинивает рандомно + доступ к логину за пределами форума

Сообщение BadBlock » 01.06.2019 20:26

Sheer писал(а):
01.06.2019 19:39
Я сейчас авторизован на этой конференции сразу с двух разных устройств и с двух разных браузерах. Куки соответственно разные. И просматриваю две разные страницы. Могу одну и ту же. И почему-то меня "не разлогинивает". Знаете почему?
Да, я программист, работаю программистом, мне за это платят зарплату, и прекрасно знаю, почему.
одновременно для одного и того же пользователя может создаваться несколько сессий с разными ключами автовхода.
Это не имеет отношения к делу, потому что речь об одном браузере.
Для одного браузера может быть только одна активная сессия с одним идентификатором sid, и только один валидный ключ k.

Что имеет значение, так это то, что ключ автовхода не постоянен.
Он действует только до первого его использования — генерации новой залогиненной сессии.
Сразу после первого использования ключ регенерируется с использованием идентификатора новой сессии.
Повторное использование ключа автовхода невозможно, т.к. он после первого же использования пропадает из БД - перезаписывается новым.
Именно поэтому в описанном мной сценарии может происходить разлогинивание юзера.

Раз:

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

function session_create (
...
		// Regenerate autologin/persistent login key
		if ($session_autologin)
		{
			$this->set_login_key();
		}
Два (обратите внимание на комментарий):

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

	/**
	* Set/Update a persistent login key
	*
	* This method creates or updates a persistent session key. When a user makes
	* use of persistent (formerly auto-) logins a key is generated and stored in the
	* DB. When they revisit with the same key it's automatically updated in both the
	* DB and cookie. Multiple keys may exist for each user representing different
	* browsers or locations. As with _any_ non-secure-socket no passphrase login this
	* remains vulnerable to exploit.
	*/
	function set_login_key($user_id = false, $key = false, $user_ip = false)
	{
Посмотрите, что делает функция set_login_key() — она заново генерирует ключ из новой сессии, перезаписывает ключ в БД, уничтожая предыдущий, и перезаписывает ключ в куке.
После этого снова прочитайте описанный мной сценарий — возможно, станет понятно, как происходит разлогинивание.
Беглое прочтение кода этих двух функций показывает, что описанный мной сценарий совершенно реален и вполне может привести к разлогиниванию.
Sheer писал(а):
01.06.2019 19:39
Тогда зачем вы все это тут пишете? Мысли вслух?
Возможно, мы сможем силами форума предложить решение.
Если нет, попробую написать на phpbb.com.
Последний раз редактировалось BadBlock 01.06.2019 20:33, всего редактировалось 1 раз.

Вернуться в «Поддержка phpBB 3.2.x»