Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492

Как узнать "кто онлайн?" в своей социальной сети

06.03.2012, 05:56. Показов 8289. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, при создании соцсети, как сделать функцию которая будет проверять онлайн пользователь или нет, а потом выводит сообшение "online" если пользователь будет в сети??
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2012, 05:56
Ответы с готовыми решениями:

Как создать мобильную версию своей социальной сети на мобильные устройства?
Здравствуйте всем. Возник такой вопрос. Как создать мобильную версию своей социальной сети на мобильные устройства(winphone само собой). Не...

Как узнать, кто онлайн
привет. Решил написать такой модуль как кто онлайн на сайте. ну определить количество онлайн было не сложно ...

Как узнать, кто заходит ко мне на компьютер из сети?
Как узнать кто заходит ко мне на компьютер из интернета? Здесь вроде не форум для слабовидящих...нарушаете правила п.3.4 Добавлено...

34
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
06.03.2012, 07:06
я думаю что надо Выводить всех пользователей с $_SESSION['username'];

Добавлено через 14 минут
Есть еще вариант правда незнаю как работает:
1. Хранить Сессию в БД и выводить кто в ней!
2. При авторизации пользователя заносьть в бд премя а на странице выводить пользователей кто был 2минуты назад!
1
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
06.03.2012, 12:40
Цитата Сообщение от Zazu Посмотреть сообщение
Подскажите пожалуйста, при создании соцсети, как сделать функцию которая будет проверять онлайн пользователь или нет, а потом выводит сообшение "online" если пользователь будет в сети?
В БД сохранять время последнего запроса пользователя к даному сайту... И, если не наблюдается активности в течении некоторого времени, убирать значёк онлайна...
0
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492
06.03.2012, 17:37  [ТС]
а как спомощью куки можно сделать?
0
Исследователь
 Аватар для Jallik Lich
196 / 175 / 13
Регистрация: 30.10.2011
Сообщений: 605
Записей в блоге: 7
06.03.2012, 19:08
Цитата Сообщение от Zazu Посмотреть сообщение
а как спомощью куки можно сделать?
Вряд-ли... Куки хранятся на компе пользователя и видны только ему...
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
06.03.2012, 20:16
Как делал это я:
При любом действии пользователя на сайте заносить в БД время сего действия в формате UNIX. То есть, при каждом обновлении страниц, это поле в БД будет меняться. При отображении данных пользователя, при выводе статуса "онлайн", проверять больше ли оно, чем time() - 300 (5 минут). Для вывода блока "кто онлайн" выбирать из БД запросом с WHERE time > time() - 300.

У этого подхода есть минут - слишком частое обращение к БД для того, чтобы перезаписать время. Это можно оптимизировать, скажем, изменяя данные не более одного раза в минуту (эту же информацию следует хранить в сессии).
0
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
06.03.2012, 21:49
Zazu, Я раньше делал без JS. И эффективность не очень. Сейчас-же один человек попросил помощ по сайту. По мере создания сайта я сталкивался с JS, и с помощью AJAX сделал систему онлайна. Главное чтобы соеденение было нормальное. Если страницы всеже будут грузится дольше 10 секунд. То советую выводить юзеров которые заносили время последнего запроса JS в БД.

Страница HTML где автоматически посылается запрос с помощью JQuery:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>AJAX</title>
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/update.js"></script>
</head>
 
<body>
</body>
</html>
Далее надо иметь рядом с этим файлом папочку "js"(по моему примеру), в которой должны хранится 2 JS файла. Один, это JQuery библиотека которую можно скачать с jquery.com(лутше mini версию на мой взгляд). А второй файл написать таким образом:

JavaScript
1
2
setInterval("Update();",5000);
function Update(){$.post("ajax/update.php",{update:1},function(result){eval(result);});}
Выше написанный JS будет не только отправлять запрос каждые 5 секунд на обновление, но будет исполнять возвращаемый JS код(ну-у-у если надо). Интервал можно и больше сделать. Как видно 5000 == 5 секунд, значит 10000 == 10 секунд.

Далее, рядом с HTML файликом надо иметь папочку ajax(по моему примеру) и иметь в ней PHP файл который соеденяется с базой и обновляет данные о пользователе по сессиям с которыми он явно ходит.

Пример:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
$host = "localhost";
$name = "";
$pass = "";
$mydb = "";
$link = mysql_connect($host,$name,$pass);
mysql_select_db($mydb,$link);
mysql_query("SET NAMES `utf8`");
unset($host,$name,$pass,$mydb,$link);
 
if($_SESSION['ID'] != ""){ /* MySQL UPDATE */ }
?>
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 01:23
Maksimchikfull, всё в общих чертах верно (в JS не знаток правда, для этого есть свой js-кодер), но почему вы так не любите БД? Что она вам сделала? Я к тому, что не стоит так часто тра**** БД. Обновление блока "онлайн" и установка времени последней активности - не столь приоритетная операция, как, скажем, "мгновенные" сообщений. Думаю, достаточно обновляться раз в пол минуты, минуту. Вконтакте, вроде бы, при промежутке неактивности пользователя вплоть до 15 минут (могу ошибаться касательно точного промежутка времени), юзер считается пользователем онлайн. И это при том, что за 15 минут он не обновил ни одну страницу. Так зачем вообще долбить БД при неактивности пользователя так часто? Зачем обновлять время последней активности посредством AJAX? Я мог оставить вкладку в браузере открытой и пойти пить пиво спать. Но ведь я не онлайн, а "пингер" будет пинговать время последней активности исправно всю ночь...

Как я сказал, время последней активности стоит изменять при обновлении страницы и с помощью сессии реализовать ограничение, не позволяющее менять это значение чаще чем раз в n минут.

Если же требуется сделать динамический список, типа "кто онлайн", который будет обновляться без обновления страницы, то да, AJAX, но не так часто, да и нужно ли это?..
0
24 / 24 / 8
Регистрация: 27.02.2012
Сообщений: 492
07.03.2012, 12:17  [ТС]
Спасибо большое всем за желание помочь! Я думаю самый лучший вариант узнавать "Кто онлайн?" с помощью Ajax!
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 14:53
Бедная БД
0
75 / 75 / 13
Регистрация: 02.02.2012
Сообщений: 462
07.03.2012, 15:45
я вот так выводил сколько гостей и зарегистрированных пользователей онлайн

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function whoOnline($db){
    session_start();
    $sessionId=session_id();
    $sql="SELECT * FROM whoonline WHERE sessionId='$sessionId'";
    $result=mysql_query($sql,$db);
    if(mysql_num_rows($result)>0){
        $sql="UPDATE whoonline SET login='$_COOKIE[login]', time=NOW() WHERE sessionId='$sessionId'";
        mysql_query($sql, $db);
    }else{
        $sql="INSERT INTO whoonline VALUES(null,'$sessionId', '$_COOKIE[login]', NOW())";
        mysql_query($sql, $db);
    }
    $sql="DELETE FROM whoonline WHERE time < NOW( ) - INTERVAL '10' MINUTE";
    mysql_query($sql, $db);
    $sql="SELECT * FROM whoonline";
    $result=mysql_query($sql, $db);
    $user=0;
    $quest=0;
    while($row=mysql_fetch_assoc($result)){
        if(empty($row["login"])){
            $quest++;
        } else{
            $user++;
        }
}
    $output="Гостей ".$quest."<br>Пользователей ". $user;
    return $output;
}
1
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 16:17
login='$_COOKIE[login]'

Много чего нехорошего тут можно сделать.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
07.03.2012, 16:29
Цитата Сообщение от fireridlle Посмотреть сообщение
session_start();
$sessionId=session_id();
разве session_id() вызывают не раньше чем session_start() ???
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
07.03.2012, 16:53
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
разве session_id() вызывают не раньше чем session_start() ???
хм, эти 2 функции не связаны напрямую

Добавлено через 1 минуту
Цитата Сообщение от Art-corp Посмотреть сообщение
Бедная БД
Если техзадание стоит считать юзера онлайн раз в 5 секунд, то причем тут бедная БД?
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 17:32
arvitaly, увы, причём! И если заказчик так считает, то его стоит хотя бы попытаться переубедить. Например, так: у меня открыто 5 страниц пользователей (а это не много, правда?), то есть, за пять секунд - 5 запросов, за минуту - 60... Кроме меня в своих браузерах открыли по пять страниц ещё 100 юзеров (100 - тоже достаточно не много). Вот и получается, что в минуту к БД летит 6000 запросов. По-моему, дохрена. И это кроме десятков других действия, непосредственно связанных с БД. А если ещё додуматься пинговать каждые 5 секунд время последней активности (без реальной активности, при лишь открытой странице) пользователя, то... Мудак глуп тот заказчик, которому требуется такой быстрый и частый отклик на проверку статуса "онлайн", тем более, что этот статус имеет большую погрешность, т. к. время последней активности могло быть 5 минут назад, но ведь пользователя нельзя уже считать оффлайном! Может я за чаем сходить решил... А скрипты клиентов моей страницы всё-равно каждые 5 секунд лезут в БД, чтобы узнать, тут я или нет. Глупость!
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
07.03.2012, 17:35
Хм, а в чем разница допустим если 12000 пользователей каждые 5 секунд будут оставлять сообщения, а не проверять статус онлайн? Разве тут ваша БД не загрузится?
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 17:45
То, что у пользователей возникнет столь огромное желание общаться - их право, для этого сайт и пишется. Это вынужденные обращения, обязательные, важные и неотъемлемые. А бессмысленное пингование (почему бессмысленное - объяснил выше) - излишние затраты, НИКОМУ не нужные, даже пользователю. И их легко можно избежать. И это далеко не микрооптимизация, это, увы, макро~.

ЗЫ. БД не моя.

Добавлено через 5 минут
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
разве session_id() вызывают не раньше чем session_start() ???
Не уверен, но вроде бы Вы не совсем правы. Функция делает два действия, либо устанавливает, либо возвращает SID (в зависимости от наличия необязательного параметра). В примере fireridlle идентификатор получается. Думаю, вызываться перед session_start() функция session_id() должна в случае, если она устанавливает идентификатор. Если мы установим идентификатор после запуска сессии, то смысл этой установки теряется. Ведь так?
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
07.03.2012, 17:46
К примеру в чате вполне вероятно хочется узнавать о доступности пользователя намного быстрее чем через минуту
0
 Аватар для Art-corp
25 / 25 / 3
Регистрация: 26.01.2012
Сообщений: 54
07.03.2012, 17:50
Чаты не стоит писать на PHP Это огромнейшая нагрузка, т. к. идея чата заключается в быстром отклике.
NodeJS

Добавлено через 1 минуту
Хотя, чат можно оптимизировать и на PHP, но больших успехов при большом онлайне, не думаю, что можно добиться. Я о Shared memory.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
07.03.2012, 17:52
Лучший ответ Сообщение было отмечено как решение

Решение

Читаю вот ваши посты и решил тоже написать
Я считаю, что Art-corp дельные вещи говорит, не стоит на Ajax'е такое реализовывать. Лучше скрипт "онлайн/оффлайн" подключать к страницам, и обращаться к БД только в том случае, если пользователь зашёл на страницу или перезагрузил её.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2012, 17:52
Помогаю со студенческими работами здесь

Как узнать кто в сети запустил мою программу
Может есть какой-то иной способ как сканирование всех айпи сети через? Программа для общение по сети......

Отслеживание трафика в сети или как узнать кто где шарил?
Возник вопрос по отслеживанию трафика в локальной сети с интернетом. Приведу вопросы в примерах: 1) как узнать какие сайты посещал...

Как узнать, кто заходил в папку (или делал изменения), которая находится в сети
У нас доменная сеть, у каждого пользователя есть своя учетка. Помогите написать прогу которая фиксирует кто заходил в папку последний.

Как заработать в социальной сети
Всем привет! Если создать группу и публиковать в нее арбитражные ссылки, можно ли нормально на этом заработать?

Как починить музыку в социальной сети?
Доброго всем. Создал социальную сеть. Музыка загружается нормально, но не играет при нажатии на иконку плей. Вот скрин с ошибками: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru