|
автор: Настя (10.01.2006 в 20:12) |
|
| Правильно ли я понимаю, что нужно в каждую страницу (на которой мы хотим учитывать пользователя как находящегося на сайте) вставить код, который будет:
1. определять ай-пи пользователя
2. записывать/перезаписывать (если уже был записан) его ай-пи + когда сделана запись
3. проверять все записи и удалять все, которые, допустим, старше 10 минут
Это правильно?
Есть ли другие способы подсчитать количество пользователей, находящихся на сайте?
Я боюсь, что это может сильно нагружать сайт. Если учесть, что иногда (по моим прикидкам), на сайте идет до 100 загрузок страниц в минуту, и в каждой будет этот доп. код. Или не стоит этого опасаться? | |
|
|
|
|
|
|
|
для: Настя
(10.01.2006 в 20:12)
| | 1) Обычно используют не IP-адрес пользователя, а сессию...
>Это правильно?
Да всё правильно.
>Есть ли другие способы подсчитать количество пользователей,
>находящихся на сайте?
Можно анализировать журнальные файлы Web-сервера (log-файлы), если они вам доступны. Ведь сервер всё равно эту работу осуществляет.
>Я боюсь, что это может сильно нагружать сайт. Если учесть,
>что иногда (по моим прикидкам), на сайте идет до 100
>загрузок страниц в минуту, и в каждой будет этот доп. код.
>Или не стоит этого опасаться?
В принципе может, но 100 хитов в минуту - это не так много, скорее всего никаких задержек не будет. | |
|
|
|
|
автор: Настя (10.01.2006 в 20:58) |
|
|
для: cheops
(10.01.2006 в 20:31)
| | А чем сессия лучше ай-пи в данном случае? | |
|
|
|
|
|
|
|
для: Настя
(10.01.2006 в 20:58)
| | Тем что о сроке ее жизни беспокоится сам сервер. Ну и кроме того она, вероятно, все равно вам потребуется если вы планируете делать, например, авторизацию. | |
|
|
|
|
|
|
|
для: Настя
(10.01.2006 в 20:58)
| | Из под одного IP-адреса сайт может посещать множество человек - для каждого из них сессия будет уникальна, а IP-адрес - нет. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2006 в 22:19)
| | ... и наоборот: один пользователь может в течение сессии несколько раз подключаться с разных ip (dial-up) | |
|
|
|
|
|
|
|
для: Настя
(10.01.2006 в 20:12)
| | Вот, изучите такой пример (вырезал из своей CMS):
<?
############ WHOSEONLINE FUNCTION START ######
if(isset($_SESSION['username'])) {
$thisusername = $_SESSION['username'];
$nowtime = time();
$query = "DELETE FROM $whoseonlinetable WHERE userip='$REMOTE_ADDR'";
mysql_query($query);
$query = "INSERT INTO $whoseonlinetable (username, isreg, userip, lastactivitytime) VALUES ('$thisusername', '1', '$REMOTE_ADDR', '$nowtime')";
mysql_query($query);
$query = "UPDATE st_users SET lastvisit='$nowtime' WHERE username='".mysql_escape_string($thisusername)."'";
mysql_query($query);
} else {
$nowtime = time();
$query = "DELETE FROM $whoseonlinetable WHERE userip='$REMOTE_ADDR'";
mysql_query($query);
$query = "INSERT INTO $whoseonlinetable (username, isreg, userip, lastactivitytime) VALUES ('guestuser', '0', '$REMOTE_ADDR', '$nowtime')";
mysql_query($query);
}
// online-bits
$usersonlinebits = "";
$remainingtime = time() - 300;
$query = "DELETE FROM $whoseonlinetable WHERE lastactivitytime<$remainingtime";
mysql_query($query);
$onlineusersquery = "SELECT * FROM $whoseonlinetable ORDER BY username ASC";
$onlineusersresult = mysql_query($onlineusersquery);
$onlineuserscount = mysql_numrows($onlineusersresult);
if($onlineuserscount != 0) {
while($onlineuser = mysql_fetch_array($onlineusersresult)) {
if($onlineuser['username'] != "guestuser") {
$onlineusersarray[] = $onlineuser['username'];
} else {
$onlineguestsarray[] = $onlineuser['username'];
}
}
if(!isset($onlineusersarray)) {$oucount = 0;} else {$oucount = count($onlineusersarray);}
if(!isset($onlineguestsarray)) {$ogcount = 0;} else {$ogcount = count($onlineguestsarray);}
$usersonlinebits .= "<font class='header-11px-normal'>";
$usersonlinebits .= "<a href='#' onclick=\"window.open('/showusersonline.php', '_blank', 'toolbar=0, scrollbars=1, location=0, menubar=0, width=440, height=400');\"><font style='text-decoration: underline;'>Сейчас на сайте</font></a>: ".$oucount." участников и ".$ogcount." гостей.";
$usersonlinebits .= "</font>";
}
$page_code = str_replace("[%online_bits%]", $usersonlinebits, $page_code);
############ WHOSEONLINE FUNCTION END ########
?>
|
| |
|
|
|
|
|
|
|
для: DDK
(10.01.2006 в 22:52)
| | Не плохо бы к нему приложить структуру таблицы базы данных - иначе тяжело воспринимается. | |
|
|
|
|
|
|
|
для: cheops
(11.01.2006 в 00:13)
| | тяжело воспринимаются длиннющие имена переменных без разделения слов. прямо пример
к вашей книге - о том, как не надо называть переменные и функции :)
а структура таблицы видна в запросе insert. | |
|
|
|
|
|
|
|
для: elenaki
(11.01.2006 в 09:09)
| | Короткие переменные тоже плохо, но в циклах согласен, традиционно используются односимвольные индексы - так как программисты привыкли воспринимать информацию именно в таком виде. | |
|
|
|