Xwab
Форумыnavigate_nextПрограммирование на PHP

offline/online статусы
Сообщения
GRAYA

Давайте поищем альтернативные способы вывода [off]/[on] статуса посетителя (думаю не одному мне будет интересно). Я ломал голову как выполнить данную задачу, и не нашел решений. Как по мне, проще всего определить сессию, и если такова имеется, вывести необходимый статус. Но вот как реализовать сей скрипт, я незнаю. Может кто подскажет? )

15 Ноя 2010, 10:04
luethus

можно записывать время последнего его посещения и сессию в бд. если разница между текущим временем и тем временем в базе, скажем, не более 5 минут, и сессия не пуста, тогда он онлайн.
когда он сам выходит (например Выход нажал где-то), сессия в бд очищается, условие уже не проходит и он оффлайн.

15 Ноя 2010, 10:34
Replikon

Это все хрень. Смысл в том, чтобы запомнить когда юзер последний раз появлялся на сайте. И если с тех пор прошла, скажем 1 минута, то считать, что он в онлайне.
А как это реализовать - тут уж у кого как фантазия разгуляется.

17 Ноя 2010, 11:31
Replikon

Сессии, кукисы, база данных, файлы и т.п. - это просто хранилище информации.
А что именно использовать, не столь важно (хотя важно, нужно думать, что в данном случае лучше использовать.
Например, для сайта с большой посещаемостью - сессии - это просто убийство будет).

17 Ноя 2010, 11:35
Mars

сессии и в базе бывают...

17 Ноя 2010, 11:43
AXILES

Если нужно считать авторезованых то лучше это будет записывать последний time в бд просто Делаеш time()+60; потом смотриш если у юзета тиме больше чем вобще то он в сети если нет то нет я у себя так делал

17 Ноя 2010, 12:02
web-master

я делаю так:
функция...
function onliner($id_user)
{
global $on_base;
$online_user='OFFLINE';
$key_session=session_id();
// Проверяем, присутствует ли такой id в базе данных
$ses=mysql_query("SELECT * FROM online WHERE key_id='".$key_session."'");
// Если сессия с таким номером уже существует,
// значит пользователь online - обновляем время его
// последнего посещения
if(mysql_num_rows($ses)>0)
{
mysql_query("UPDATE online SET
time='".time()."'
WHERE key_id='".$key_session."'");
}
// Иначе, если такого номера нет - посетитель только что
// вошёл - помещаем в таблицу нового посетителя
else
{
if(isset($_SESSION['id']))
{
mysql_query("UPDATE online SET
time='".time()."',
date='".time()."',
key_id='".$key_session."'
WHERE id_user='".$_SESSION['id']."'");
}
}
// Будем считать, что пользователи, которые отсутствовали
// в течении 20 минут - покинули ресурс - удаляем их
// id_session из базы данных
mysql_query("UPDATE online SET
key_id='0'
WHERE time<'".time()."'-1200");
$on_base=mysql_fetch_array(mysql_query("SELECT * FROM online WHERE id_user='".$id_user."'"));
if($on_base['key_id']>'0')
{
$online_user='ONLINE';
}
return $online_user;
}
таблица:
CREATE TABLE `online` (
`id_user` int(11) NOT NULL default '0',
`time` varchar(255) NOT NULL default '',
`date` varchar(255) NOT NULL default '',
`key_id` varchar(255) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

использование:
onliner($id_user);

17 Ноя 2010, 12:16
AXILES

web-master, да ну так много кода зачем?даже по ип можно сделать там вобще кода мало будит

17 Ноя 2010, 12:19
web-master

AXILES, ну как получилось так и получилось

17 Ноя 2010, 12:26
AXILES

web-master, а ну ты так на код не смотрел ты просто написал что написал лижбы работала

17 Ноя 2010, 12:30
Ответить на тему