За последние 24 часа нас посетили 37276 программистов и 1721 робот. Сейчас ищет 621 программист ...

Как узнать, online ли определённый пользователь или offline?

Тема в разделе "PHP для новичков", создана пользователем alex455, 28 сен 2011.

  1. alex455

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

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Если писать систему логина пользователей на сайт, то как сделать возможность смотреть статус пользователя на сайте (online/offline) - с применением http://www.php.net/manual/ru/book.session.php ? Или это по-другому делается?
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Обычно это делается гораздо проще.

    Когда пользователь делает какое-либо действие на сайте (т.е. посылает запрос на сервер), записывается время этого действия.

    И если разница между текущим временем и временем действия меньше допустим 5 минут - пользователь считается онлайн. Если больше - оффлайн.

    Принцип понятен?
     
  3. alex455

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

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Но на сайтах типа контакта или mail.ru определение статуса пользователя точное, а не примерное в +/-5 минут.
     
  4. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    alex455
    а если пользователь отошел от компьютера?
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Там JavaScript из браузера каждые 5-10 сек какой-нибудь запрос да отправляет на сервер.
    Зайди на mail.ru из двух разных браузеров, в одном из них авторизуйся, а в другом просто перейди на просмотр профиля своего пользователя (не авторизуясь). Ты будешь видеть, что ты онлайн. Теперь, не нажимая кнопки "Выход", просто закрой тот браузер, в котором ты авторизован, а во втором браузере посмотри, сколько примерно времени маил.ру будет продолжать считать, что ты авторизован.
     
  6. alex455

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

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Отошёл - всё равно online, вроде. Отслеживается сам факт - открыта ли хоть 1 страница сайта в браузере его компа или нет. Или это уже не средствами PHP делается?
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Я написал выше - там JavaScript постоянно делает обращения к серверу. По этим запросам серверная часть (которая может быть на php, может быть на каком-то другом языке програмирования) понимает, что пользователь онлайн.
     
  8. alex455

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

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    Теперь понятно.
    А для чего тогда нужны сессии в PHP если cookie делают всё, что нужно?
     
  9. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Чтобы не записывать в куки пользователя его логины-пароли. Так легче взломать пользователя. И уж тем более плохая идея записывать userid пользователя в куки. Так он сможет поменять сам значение этой куки и стать любым другим пользователем (например, админом ресурса) и выполнять от его имени любые действия.
    session_start() записывает в куки лишь ничего не значащий для человека набор символов (идентификатор сессии), а все данные пользователя хранятся на сервере и пользователь не сможет их изменить или получить.
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можно и самому полностью реализовать весь функционал сессий. Но есть уже реализованные функции session_* , которые вполне удобны в использовании и в большинстве случаев их достаточно.
     
  11. alex455

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

    С нами с:
    27 май 2011
    Сообщения:
    63
    Симпатии:
    0
    А если использовать cookie, только вместо логина в имени пользователя писать его секретный идентификатор, например, имя_cookie = "login", значение_cookie = "geijaiweevohLeiSoshiequoe3aing". Для каждого аккаунта будет свой уникальный идентификатор для cookie. Это надёжно?
     
  12. rainarr

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

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    ну в современных сайтах обычно есть какой нить спрятанный див, который получает инфу с помощью jquery от какого нибудь файла каждые 10 секунд + в нем же записывается last_activity. я так делаю и например если мне нужно узнать онлайн ли пользователь то хватает секунд 20, а не 3-5 минуты.
     
  13. georgela

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

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    alex455
    Сделай для начала с точностью 5 мин.Это проще ,а Jquery используй когда уже будешь увеличивать функционал проекта.
     
  14. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Вполне. По сути это и будет сессия, т.е. то, как сессия работает. Там же тоже в куках ключ хранится, а на основании ключа - загружается файлик с данными.
    Встроенные сессии хороши для простеньких наколеночных скриптов. Чем дальше в лес, тем меньше я понимаю необходимость сессий. Боятся использовать пароль как ключ тоже не стоит - создавайте ключ как хеш от нескольких переменных, одна из которых - хеш пароля из базы. Другие могут быть, к примеру, IP - если нужна привязка к IP пользователя, или время жизни - если нужно разлогинивать.