Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: если я пользую сессии - то как мне определить кто онлайн?
 
 автор: ref   (10.08.2004 в 12:54)   письмо автору
 
 

собственно сабж
спасибо зарание!

   
 
 автор: cheops   (10.08.2004 в 13:51)   письмо автору
 
   для: ref   (10.08.2004 в 12:54)
 

Хм... проблему можно решить, но вам в любом случае необходимо будет где-то хранить время последнего посещения с сессии, либо в базе данных, либо в файле. Ближе к вечеру я постараюсь выложить здесь наброски для варианта в MySQL.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=150&page=2

   
 
 автор: cheops   (10.08.2004 в 23:24)   письмо автору
 
   для: cheops   (10.08.2004 в 13:51)
 

Для начала следует создать таблицу session в базе данных (ну, пусть будет test)
CREATE TABLE session (
  id_session tinytext NOT NULL,
  putdate datetime NOT NULL default '0000-00-00 00:00:00',
  user tinytext NOT NULL
) TYPE=MyISAM;

В id_session будет храниться уникальный id сессии, во втором поле putdate - время последнего обращения с неё, в последнем имя посетителя, связанного с этой сессией...
Страница которую посещает посетитель должна включать код
<?php
  $user 
"user1";
  
$password "password1";
  
// Начинаем сессию
  
session_start();
  
// Заносим в сессию имя пользователя и его
  // пароль
  
$_SESSION['user'] = $user;
  
$_SESSION['password'] = $password;
  
//////////////////////////////////////////////
  // А в базу данный заносим имя пользователя
  // время его посещения, и уникальный id сессии
  //////////////////////////////////////////////
  // Устанавливаем содинение с базой данных
  
$dblocation "127.0.0.1";
  
$dbname "test";
  
$dbuser "root";
  
$dbpasswd "";
  
// Устанавливаем соединение с базой данных
  
$dbcnx = @mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx)
  {
    echo 
"<p>К сожалению, не доступен сервер MySQL</p>";
    exit();
  }
  
// Выбираем базу данных
  
if (!@mysql_select_db($dbname$dbcnx))
  {
    echo 
"<p>К сожалению, не доступна база данных</p>";
    exit();
  }
  
// Получаем уникальный id сессии
  
$id_session session_id();
  
// Проверяем присутсвует ли такой id в базе данных
  
$query "SELECT * FROM session
            WHERE id_session = '
$id_session'";
  
$ses mysql_query($query);
  if(!
$ses)
  {
    echo 
"<p>Ошибка в запросе к таблице сессий</p>";
    exit();
  }
  
// Если сессия с таким номером уже существует, 
  // значит пользователь online - обновляем время его
  // последнего посещения
  
if(mysql_num_rows($ses)>0)
  {
    
$query "UPDATE session SET putdate = NOW()
              WHERE id_session = '
$id_session'";
    
mysql_query($query);
  }
  
// Иначе, если такого номера нет - посетитель только что
  // вошёл - помещаем в таблицу нового посетителя
  
else
  {
    
$query "INSERT INTO session VALUES('$id_session',NOW(),'$user')";
    if(!
mysql_query($query))
    {
      echo 
$query."<br>";
      echo 
"<p>Ошибка при добавлении пользователя</p>";
      exit();
    }
  }
  
// Будем считать, что пользователи, которые отсутствовали
  // в течении 20 минут - покинули ресурс - удаляем их
  // id_session из базы данных
  
$query "DELETE FROM session WHERE putdate < NOW() -  INTERVAL '20' MINUTE";
  
mysql_query($query);
?>

Страница для просмотра online-пользователей можно генерировать при помощи скрипта:
<?php
  
// Устанавливаем содинение с базой данных
  
$dblocation "127.0.0.1";
  
$dbname "test";
  
$dbuser "root";
  
$dbpasswd "";
  
// Устанавливаем соединение с базой данных
  
$dbcnx = @mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx)
  {
    echo 
"<p>К сожалению, не доступен сервер MySQL</p>";
    exit();
  }
  
// Выбираем базу данных
  
if (!@mysql_select_db($dbname$dbcnx))
  {
    echo 
"<p>К сожалению, не доступна база данных</p>";
    exit();
  }
  
// Выводим имена всех посетителей, записи о ком имеются
  // в таблице session
  
$query "SELECT * FROM session";
  
$ath mysql_query($query);
  if(!
$ath)
  {
    echo 
"<p>Ошибка в запросе к таблице сессий</p>";
    
exti();
  }
  
// Если хоть кто-то есть - выводим таблицу
  
if(mysql_num_rows($ath)>0)
  {
    echo 
"<table>";
    while(
$author mysql_fetch_array($ath)) echo "<tr><td>".$author['user']."</td></tr>";
    echo 
"</table>";
  }
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования