Появилась проблема с отфильтровкой пользователей во время логирования. То есть надо получать `живые` сессии. Задача №1 - нельзя заходить под одним и тем же логином на сайт. Задача №2 - если один пользователь уже вошел под определенным ip - второй с этого ip зайти уже не может. Вопрос, собственно говоря, не удалось сформировать гуглу, может хоть с формулировкой поможете .
Это как? Так и так нельзя регистрироваться с одним и тем же логином. А если имеется в виду, что нельзя авторизироваться с разных браузеров под одним и тем же логином, то это бред. Может я пользуюсь двумя браузерами. Зашел с новым IP — выкинь того, кто со старым.
Вообще-то браузер только один - IE6 с порезаными правами, а вот компьютеров несчесть. Новый не должен заходить. Ранее вошедший должен блокировать доступ к страницам.
Тогда создать в БД таблицу сессий. Когда пользователь заходит на страницу, мы проверяем, авторизирован ли он в системе. Если пользователь не авторизирован, никаких действий мы не производим соответственно. Если пользователь авторизирован или послал команду авторизации, то делаем мы следующее: Стартуем новую сессию для пользователя и записываем в таблицу сессий: ID пользователя, ID сессии (UNIQUE Field), IP. Далее, при навигации по странице проверять активность сессий. Если пользователь пытается снова авторизироваться, но уже с другим IP, а этот ещё в системе, то мы просто-напросто его не пускаем, пока в таблице существует активная сессия. Вроде понятно объяснил.
Shultz Создайте новую таблицу online. Вносите туда при авторизации данные (включая timestamp). При каждом шаге по сайту обновляйте timestamp на 60 секунд, скажем. Если пользователь неактивен > 300 секунд — удаляйте его из таблицы. При авторизации проверяйте — если пользователь есть на сайте, не пускать нового, пока старый не вылетит.
Спасибо, почти готовое решение . А я себе голову ломала, всё так легко с CodeIgniter Redux было, а потом началось... пришлось все с нуля писать. Только при каждом шаге по сайту неправильно, придется обновлять страницу принудительно или JavaScript задействовать.
Какие общие вопросы... Сидит пользователь с постоянно открытой страницей в браузере (это 100%), страница с определённой периодичностью ajax`ом посылает на сервер данные, что пользователь живее всех живых. Пользователь может вообще не ходить по сайту, а информация о его присутствии будет обновляться.
Shultz На самом деле такая точная информация о состоянии редко бывает нужна Я такое задействовал только в своей браузерной ММОРПГ.
У меня тоже подземелья и драконы - я друиделла третьего уровня каждый день иду на бехолдера двадцатого уровня, которого зовут "насяльника". Получить новый уровень не получается, умираю после второй атаки...