FanatPHP, ну ок. Если вы считаете, что так лучше...
1. Контроллер "Авторизация"
1.1 Метод для входа
Форма для входа с правилами валидации. Правила валидации проверяют, что введено то, что надо, пользователь не заблокирован, пароль совпадает и т.д.
В случае удачного входа:
- в модели "авторизация" добавляем запись, со ссылкой на пользователя
- колбеком ставить куку. В куке токен, ключ от которой хранится в записи сессии в БД.
1.2. Метод для выхода
Если есть кука - найти сессию и деактивировать её (через модель авторизации). Можно удалить куку.
2. Модель "Авторизация"
1. Метод для создания сессий
2. Метод для поддержки сессий
- читает куку
- ищет сессию
- проверяет свойства сессии и указанного пользователя
- в зависимости от результатов проверки, пишет в БД свойство пользователю онлайн (и/или последнее время онлайн), и записывает в класс пользователя его свойства, для дальнейших проверок прав доступа
3. Метод для выхода
- деактивация сессии (флажок снять или поставить)
Некоторые методы могут быть размещены не в контроллере, а в модели. Или не в модели, а в контроллере. На самом деле это вкусовщина, или следование какому-то принятому гайду - как вам больше нравится.
Так?
Или обязательно надо написать код? Или псевдокод? Или UML? DFD? IDEF? =)
Соответственно, эта модель легко расширяется. Можно делать выборки из таблички сессий - получите перечень активных и архивных сессий, можно вывести по каждому пользователю. Можно туда записывать устройства, IP-адреса и др. Можно сделать функцию "выход на всех устройствах" и поддержку единой авторизации для браузеров и мобильников.
Подчеркну, технически минимальное количество сущностей (таблиц в БД) - две. Пользователи и сессии.
Александр Панков, была комплексная причина - 2 ошибки. 502 - это nginx не мог достучаться до PHP. Это же было причиной отсутствия вывода. <? просто должно было выводиться as is.
Некоторые методы могут быть размещены не в контроллере, а в модели. Или не в модели, а в контроллере. На самом деле это вкусовщина, или следование какому-то принятому гайду - как вам больше нравится.
Так?
Или обязательно надо написать код? Или псевдокод? Или UML? DFD? IDEF? =)