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

Форум PHP

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

 

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

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

тема: Пользователь онлайн
 
 автор: Freddie_X   (30.01.2008 в 17:05)   письмо автору
 
 

Сделал авторизацию на сайте, при которой заносится id пользователя из БД заносится в $_SESSION['id'].
Как сделать так, чтобы можно было узнать, пользователь находится онлайн или нет?
Подозвераю, что надо при авторизации писать в определённое поле метку, что он онлайн.
Но вот когда пользователь жмёт logout или закрывает страницу, как тогда удалять метку из БД?

   
 
 автор: Саня   (30.01.2008 в 17:56)   письмо автору
 
   для: Freddie_X   (30.01.2008 в 17:05)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=47610
http://softtime.ru/forum/read.php?id_forum=1&id_theme=196

   
 
 автор: Freddie_X   (30.01.2008 в 18:16)   письмо автору
 
   для: Саня   (30.01.2008 в 17:56)
 

Спасибо!

   
 
 автор: Freddie_X   (30.01.2008 в 19:07)   письмо автору
 
   для: Саня   (30.01.2008 в 17:56)
 

Вот отрывок из кода:
<?php
$id_session 
session_id();
        
$ses mysql_query("SELECT * FROM session WHERE id_session = '$id_session'");
        if(
mysql_num_rows($ses)>0
            {
                
mysql_query("UPDATE session SET putdate = NOW() WHERE id_session = '$id_session'");
            }
        else
            {
                
$query mysql_query("INSERT INTO session VALUES('$id_session',NOW(),$id)");
            }
        
mysql_query("DELETE FROM session WHERE putdate < NOW() -  INTERVAL '20' MINUTE");
?>

1) Получается, что если не обращаться к этому скрипту, запись из таблицы session не удалится?
Значит надо, чтобы другой пользователь обратился к этому скрипту, чтобы удалить записи сессий?
2) И ещё, как удалить сессию по истечении 20 минут, если к ней не было доступа. Так чтобы из таблицы стиралась запись, а сессия удалялась.

1) Уже разобрался.
2) Для удаления сессии нашёл вот такое
ini_set('session.gc_maxlifetime', 60);

Поставил 60 секунд, чтобы проверять умирает ли сессия, чтобы долго не ждать.
Вставил эту строку перед объявлением переменной сессии ($_SESSION['id'] = "text"), но она не хочет удаляться после минуты бездействия. Что не так делаю?

   
 
 автор: hell_riser   (30.01.2008 в 20:40)   письмо автору
 
   для: Freddie_X   (30.01.2008 в 19:07)
 

>2) Для удаления сессии нашёл вот такое
>
ini_set('session.gc_maxlifetime', 60); 

>Поставил 60 секунд, чтобы проверять умирает ли сессия, чтобы долго не ждать.
>Вставил эту строку перед объявлением переменной сессии ($_SESSION['id'] = "text"), но она не хочет удаляться после минуты бездействия. Что не так делаю?

На сколько я понимаю ф-ция ini_set() меняет параметр конфигурации только на время выполнения скрипта и в вашем случае бесполезна, хотя можете заставить скрипт работать 20 минут ;) )).
Лучше измените сам php.ini, а вообще там по умолчанию итак 20 мин стоит обычно.

   
 
 автор: Freddie_X   (30.01.2008 в 20:55)   письмо автору
 
   для: hell_riser   (30.01.2008 в 20:40)
 

А если на каждой странице поставить ini_set(). Тогда будет работать?
А если нет доступа к php.ini? Только таким способом...

   
 
 автор: hell_riser   (30.01.2008 в 21:05)   письмо автору
 
   для: Freddie_X   (30.01.2008 в 20:55)
 

Нет, полагайтесь на значение установленное в php.ini
Вы к стати посмотрите (phpinfo()) какое там время выставлено

   
 
 автор: Freddie_X   (30.01.2008 в 22:09)   письмо автору
 
   для: hell_riser   (30.01.2008 в 21:05)
 

1440 сек = 24 мин.
Маловато...

   
 
 автор: а-я   (31.01.2008 в 04:06)   письмо автору
 
   для: Freddie_X   (30.01.2008 в 19:07)
 

если на сайте будет много людей, то сайт будет тормозить....

зачем вам удалять вовремя сессии? достаточно проверку из БД. что с таким сидом. человек уже ушел. его время вышло и ему надо по новой записать....

выводить данные о онлайн Вы же будете из БД. а не по тому сколько файлов у Вас.

поэтому удалять файлы можно и 1 раз в час, главное чтоб в БД было обновление.

и то можно не делать обновление БД на всех страничках, а только на тех где вам необходимо указать статистику... т.е. перед выводом онлайн.

   
 
 автор: Freddie_X   (31.01.2008 в 14:19)   письмо автору
 
   для: а-я   (31.01.2008 в 04:06)
 

То есть проверять не наличие сессии, а записи в таблице session?

   
 
 автор: А-я   (31.01.2008 в 17:08)   письмо автору
 
   для: Freddie_X   (31.01.2008 в 14:19)
 

Ну, конечно... Результат из бд будет быстрее. Чем проверка существование файлов на диске. А еще лучше отдельная статистическая таблица.

   
 
 автор: Freddie_X   (01.02.2008 в 02:23)   письмо автору
 
   для: А-я   (31.01.2008 в 17:08)
 

Спасибо, буду пробовать!

   
Rambler's Top100
вверх

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