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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: если я пользую сессии - то как мне определить кто онлайн?

Сообщения:  [1-3] 

 
 автор: 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>";
  }
?>

   
 
 автор: 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

   
 
 автор: ref   (10.08.2004 в 12:54)   письмо автору
 
 

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

   

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime