Если писать систему логина пользователей на сайт, то как сделать возможность смотреть статус пользователя на сайте (online/offline) - с применением http://www.php.net/manual/ru/book.session.php ? Или это по-другому делается?
Обычно это делается гораздо проще. Когда пользователь делает какое-либо действие на сайте (т.е. посылает запрос на сервер), записывается время этого действия. И если разница между текущим временем и временем действия меньше допустим 5 минут - пользователь считается онлайн. Если больше - оффлайн. Принцип понятен?
Но на сайтах типа контакта или mail.ru определение статуса пользователя точное, а не примерное в +/-5 минут.
Там JavaScript из браузера каждые 5-10 сек какой-нибудь запрос да отправляет на сервер. Зайди на mail.ru из двух разных браузеров, в одном из них авторизуйся, а в другом просто перейди на просмотр профиля своего пользователя (не авторизуясь). Ты будешь видеть, что ты онлайн. Теперь, не нажимая кнопки "Выход", просто закрой тот браузер, в котором ты авторизован, а во втором браузере посмотри, сколько примерно времени маил.ру будет продолжать считать, что ты авторизован.
Отошёл - всё равно online, вроде. Отслеживается сам факт - открыта ли хоть 1 страница сайта в браузере его компа или нет. Или это уже не средствами PHP делается?
Я написал выше - там JavaScript постоянно делает обращения к серверу. По этим запросам серверная часть (которая может быть на php, может быть на каком-то другом языке програмирования) понимает, что пользователь онлайн.
Чтобы не записывать в куки пользователя его логины-пароли. Так легче взломать пользователя. И уж тем более плохая идея записывать userid пользователя в куки. Так он сможет поменять сам значение этой куки и стать любым другим пользователем (например, админом ресурса) и выполнять от его имени любые действия. session_start() записывает в куки лишь ничего не значащий для человека набор символов (идентификатор сессии), а все данные пользователя хранятся на сервере и пользователь не сможет их изменить или получить.
Можно и самому полностью реализовать весь функционал сессий. Но есть уже реализованные функции session_* , которые вполне удобны в использовании и в большинстве случаев их достаточно.
А если использовать cookie, только вместо логина в имени пользователя писать его секретный идентификатор, например, имя_cookie = "login", значение_cookie = "geijaiweevohLeiSoshiequoe3aing". Для каждого аккаунта будет свой уникальный идентификатор для cookie. Это надёжно?
ну в современных сайтах обычно есть какой нить спрятанный див, который получает инфу с помощью jquery от какого нибудь файла каждые 10 секунд + в нем же записывается last_activity. я так делаю и например если мне нужно узнать онлайн ли пользователь то хватает секунд 20, а не 3-5 минуты.
alex455 Сделай для начала с точностью 5 мин.Это проще ,а Jquery используй когда уже будешь увеличивать функционал проекта.
Вполне. По сути это и будет сессия, т.е. то, как сессия работает. Там же тоже в куках ключ хранится, а на основании ключа - загружается файлик с данными. Встроенные сессии хороши для простеньких наколеночных скриптов. Чем дальше в лес, тем меньше я понимаю необходимость сессий. Боятся использовать пароль как ключ тоже не стоит - создавайте ключ как хеш от нескольких переменных, одна из которых - хеш пароля из базы. Другие могут быть, к примеру, IP - если нужна привязка к IP пользователя, или время жизни - если нужно разлогинивать.