За последние 24 часа нас посетили 16922 программиста и 1310 роботов. Сейчас ищут 1432 программиста ...

Сессии - запрет входа на сайт

Тема в разделе "PHP для новичков", создана пользователем Shultz, 20 июл 2009.

  1. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    Появилась проблема с отфильтровкой пользователей во время логирования. То есть надо получать `живые` сессии.
    Задача №1 - нельзя заходить под одним и тем же логином на сайт.
    Задача №2 - если один пользователь уже вошел под определенным ip - второй с этого ip зайти уже не может.
    Вопрос, собственно говоря, не удалось сформировать гуглу, может хоть с формулировкой поможете :).
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Это как?
    Так и так нельзя регистрироваться с одним и тем же логином.
    А если имеется в виду, что нельзя авторизироваться с разных браузеров под одним и тем же логином, то это бред.
    Может я пользуюсь двумя браузерами.

    Зашел с новым IP — выкинь того, кто со старым.
     
  3. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    Вообще-то браузер только один - IE6 с порезаными правами, а вот компьютеров несчесть.
    Новый не должен заходить. Ранее вошедший должен блокировать доступ к страницам.
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Проверяете, есть ли уже такой пользователь онлайн. Если есть — запрещаете авторизацию.
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Тогда создать в БД таблицу сессий.
    Когда пользователь заходит на страницу, мы проверяем, авторизирован ли он в системе.
    Если пользователь не авторизирован, никаких действий мы не производим соответственно.
    Если пользователь авторизирован или послал команду авторизации, то делаем мы следующее:
    Стартуем новую сессию для пользователя и записываем в таблицу сессий:
    ID пользователя, ID сессии (UNIQUE Field), IP.

    Далее, при навигации по странице проверять активность сессий.
    Если пользователь пытается снова авторизироваться, но уже с другим IP, а этот ещё в системе, то мы просто-напросто его не пускаем, пока в таблице существует активная сессия.

    Вроде понятно объяснил.
     
  6. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    Вот это мне и надо.
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Shultz
    Создайте новую таблицу online. Вносите туда при авторизации данные (включая timestamp). При каждом шаге по сайту обновляйте timestamp на 60 секунд, скажем. Если пользователь неактивен > 300 секунд — удаляйте его из таблицы.

    При авторизации проверяйте — если пользователь есть на сайте, не пускать нового, пока старый не вылетит.
     
  8. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    Спасибо, почти готовое решение :). А я себе голову ломала, всё так легко с CodeIgniter Redux было, а потом началось... пришлось все с нуля писать. Только при каждом шаге по сайту неправильно, придется обновлять страницу принудительно или JavaScript задействовать.
     
  9. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Shultz
    Зачем? °_°
     
  10. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    Какие общие вопросы...
    Сидит пользователь с постоянно открытой страницей в браузере (это 100%), страница с определённой периодичностью ajax`ом посылает на сервер данные, что пользователь живее всех живых. Пользователь может вообще не ходить по сайту, а информация о его присутствии будет обновляться.
     
  11. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Shultz
    На самом деле такая точная информация о состоянии редко бывает нужна :) Я такое задействовал только в своей браузерной ММОРПГ.
     
  12. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    У меня тоже подземелья и драконы - я друиделла третьего уровня каждый день иду на бехолдера двадцатого уровня, которого зовут "насяльника". Получить новый уровень не получается, умираю после второй атаки...
     
  13. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Shultz
    :D Начальнику можешь дать почитать наш топик.
     
  14. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    ёптыть, как всё запущено
     
  15. Shultz

    Shultz Активный пользователь

    С нами с:
    27 дек 2007
    Сообщения:
    19
    Симпатии:
    0
    в мои планы не входило умирать молодой...