Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2014-04-07 17:43:33

sadex
Участник
Зарегистрирован: 2013-06-01
Сообщений: 103
Сайт

Как FluxBB идентифицирует пользователя?

Для начала возьмем частный случай - пользователь авторизовался на форуме и у него при авторизации была установлена галочка Remember Me (Узнавать меня автоматически...). Далее, через несколько дней (меньше чем через 14) пользователь снова заходит на форум, и форум должен автоматом продлить время экспирации флаксовой куки этого пользователя еще на 14 дней.

Интересует именно процесс, как флакс узнает, что у данного юзера:
(1) есть или нет куки флакса;
(2) что кука флакса есть и галка Remember Me установлена, и что надо продлить время экспирации флаксовой куки еще на 14 дней.

При этом (1) мне менее понятно, чем (2). Мысль такая, что если юзер чужой, то сделать ему минимум проверок и поставить ему (либо не ставить?) куку гостя, который флакс ставит гостю на год.

Буду благодарен корифеям за разъяснение.
Что-то своя мозга пока не варит по данному вопросу. Не вполне понимаю, что и зачем делает скрипт функции check_cookie(), в частности, зачем ставится кука гостя на год... юзеру, который не прошел идентификацию. И почему нельзя просто пустить этого юзера мимо авторизации (авто-авторизации), никаких кук ему не выставляя?

Редактировался sadex (2014-04-07 17:44:37)

Offline

#2 2014-04-07 19:22:03

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Как FluxBB идентифицирует пользователя?

ты же видишь функцию, там всё написано big_smile

(1) она буквально проверяет есть ли нужная кука, если есть, то соответствует ли она его формулам. в частности не прошел ли срок ее действия.
"нет куки", "не соответствует" или "просрочена" это одинаково негодные состояния.

(2) если до окончания действия куки осталось больше времени, чем настройка "Таймаут визита", значит кука ставилась надолго — так и вычисляется на сколько надо продлить.

что ты называешь "юзер чужой". чужой это чей? big_smile

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


это меня наводит на стремные размышления. дальше сплошной оффтопик:

в движке есть загадочные штуки. например зачем конструктор объекта $db делает такое:

return $this->link_id

WTF?! это же конструктор, чего он тут пытается вернуть?!

или зачем после каждого $db-query() стоит "or error(…", не проще было бы засунуть это внутрь самой query — один раз?!

ну и как не задолбало в каждом вызове query() громоздить по несколько $db->prefix, когда можно было бы внутри функции query одним str_replace заменять спецсимвол какой-нибудь на этот префикс, а в запросе писать типа "?_users" или "@users". это же так просто!

почему все файлы в папке cache содержат массивы с данными, а для quickjump решили сохранять кусок кода + html? микрооптимизация позорная.

почему такая странная поддержка mb_string? если уж сделали fallback, то не стоило заводить функции с альтернативными именами, всё прогрессивное человечество делает так:

if (!function_exists('mb_func')) {
  function mb_func()
  {
    // ...
  }
}

но флаксу непременно надо объявить своё имя — utf8_func(), зачем?!

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


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#3 2014-04-07 21:18:03

sadex
Участник
Зарегистрирован: 2013-06-01
Сообщений: 103
Сайт

Re: Как FluxBB идентифицирует пользователя?

@artoodetoo, премного благодарен за внимание к теме. Конечно, я вижу скрипт функции check_cookie(), но мне не совсем понятно, в чем целесообразность такой сложной (имхо) проверки чужого (незарегистрированного) пользователя.
Просто я уже сделал в своей тестовой кмс-ке идентификацию по типу флакса (на таблицах БД и скриптах флакса, в основном), все работает в целом, а теперь допиливаю тонкости.

что ты называешь "юзер чужой". чужой это чей?

Чужой - тот у кого в браузере нет куки флакса, свой - у кого в браузере есть кука флакса (правильная или нет - это уже дальнейшая более детальная проверка, не входящая в первичную проверку свой-чужой).

Как ты пишешь:

(1) она буквально проверяет есть ли нужная кука, если есть, то соответствует ли она его формулам. в частности не прошел ли срок ее действия.
"нет куки", "не соответствует" или "просрочена" это одинаково негодные состояния.

Имхо, для моей кмс-ки много лишнего делается для определения и отделения "своего" от "чужого". Хочется сделать проще. Например.

Общие исходные (начальные) условия.
1. Произвольный пользователь юз заходит на флакс (либо на сайт с моей кмс-кой).
2. В браузере юза множество кук, среди которых может находиться, а может и нет, кука флакса (кука с именем флакса), например:
[pun_cookie_d96b4c] => 1|61235a81191e43f95be09c36e1e3ba16e808e2dc|1403688735|241be67627fe90aae1698655162ecb79104f1190
Здесь pun_cookie_d96b4c - имя куки флакса, которое, как я понял, задается единыжды при инсталляции флакса и поэтому может быть надежным идентификатором для определения свой-чужой.

Задача.
Определить наличие или отсутствие у юза (в браузере юза) куки флакса. И ВСЕ.
Если есть кука флакса - то свой, и дальше идут остальные более сложные проверки - пароль, хэш, время экспирации и т.д.
Если нет куки флакса - чужой, и дальше никаких проверок не ведется и никаких кук гостя не устанавливается. Смысл в том, чтобы простейшей и короткой (по времени и ресурсам сервера) проверкой свой-чужой отсеивать чужих. А более детально, если свой, затем проверять только своих.
Такой вариант может быть рабочим? В частности, для моей кмс-ки, где аутентификация юзера делается по типу флаксовой, в широком плане - и для флакса, в модифицированном виде?

С остальной частью сообщения скорее склонен согласиться, но надо въехать детальнее, не хочу что-то постить от фонаря.

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

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

Редактировался sadex (2014-04-07 21:35:01)

Offline

#4 2014-04-08 16:29:33

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Как FluxBB идентифицирует пользователя?

Дык, в своей сборке ты эти нескладушки можешь легко исправить.

В какой-то момент случается точка невозврата, когда понимаешь, что это уже другое изделие, а не модернизированный форум. А потом думаешь "а нафига тогда мне вообще этот legacy код, сделаю ВСЁ по своему". Так рождаются велосипеды smile


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#5 2014-04-10 19:54:29

sadex
Участник
Зарегистрирован: 2013-06-01
Сообщений: 103
Сайт

Re: Как FluxBB идентифицирует пользователя?

А потом думаешь "а нафига тогда мне вообще этот legacy код, сделаю ВСЁ по своему". Так рождаются велосипеды

Одно другому не мешает. У меня своя CMS идет своим путем, а коллективное творчество, типа FluxBB - своим. И в этом ничего плохого я не вижу. Развивается и то, и другое.

Offline

#6 2014-04-11 05:40:53

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Как FluxBB идентифицирует пользователя?

Ну я тоже, как видишь, участвую в flux big_smile


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

#7 2014-04-12 11:59:38

sadex
Участник
Зарегистрирован: 2013-06-01
Сообщений: 103
Сайт

Re: Как FluxBB идентифицирует пользователя?

@artoodetoo, я тоже чуток пытаюсь участвовать... в плане разбора способа интеграции своей CMS-ки с флаксом. Помаленьку двигаюсь, двигался бы быстрее, но другие дела часто отрывают. Теперь, надеюсь, до осени у меня будет возможность гораздо больше времени этому уделять.

Кстати, @artoodetoo, загляни в этот пост:
https://fluxbb.qb7.ru/forum/viewtopic.p … 337#p28337

может что критически откорректируешь/дополнишь, как корифей флакса. Текущая цель - составить какое-никакое рабочее описание на русском процесса авторизации и авто-авторизации на куках - того, что сделано в скриптах флакса. Имхо, это полезно будет для целей интеграции блогов и кмс-ок с флаксом.

Offline

#8 2014-04-12 16:52:45

artoodetoo
Admin by chance
Зарегистрирован: 2008-09-09
Сообщений: 887
Сайт

Re: Как FluxBB идентифицирует пользователя?

Бегло посмотрел, вроде нормально. Давай дейстувуй. Если результат оформишь как класс + инструкцию по внедрению, думаю кто-то тебе спасибо скажет.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Offline

Подвал доски

Под управлением FluxBB. Хостинг Hostens