Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Закрытие сайта, событие в php ?


Автор: Sun_ok 2.12.2009, 16:23
Здравствуйте.
Есть страница пользователя, временные данные которого хранятся в базе, в кукисах или сесси не подходит, так-как это текст, который пользователь загружает с машины, и работает в нем на сайте, текст может быть временным и постоянным, и все интсрументы работают с базой, поэтому временный текст тоже заливаются в базу.
Естественно после завершения работы текст из базы нужно удалять, хорошо если пользователь нажал Exit или сработал onbeforeunload в JS, но что делать если браузер закрылся критически ? 
Как можно отследить, есть ли связь с клиентом или уже нет ?  

Автор: Ипатьев 2.12.2009, 16:28
Это очень легко.
Прокручиваем свой скрипт вниз, и в последней строчке пишем 
echo "Связь с клиентом разоравана";



Автор: skyboy 2.12.2009, 18:01
а в таком случае не надо использовать http://ua2.php.net/manual/en/function.ignore-user-abort.php?

Автор: Pitlord 2.12.2009, 18:06
Для таких целей нужно добавить в таблицу, содержащую временные данные, поле, хранящее timestamp создания строки. Позже неактуальные (устаревшие) данные удаляются.

Автор: Sun_ok 2.12.2009, 19:14
Pitlord  Да, похоже это наиболее нормальный вариант, кроном раз в день проверять да и все, но ignore_user_abort мне не дает покоя, не могу с ним разобраться.
skyboy Спасибо за "ignore_user_abort"  буду копать.

Автор: Pitlord 2.12.2009, 19:31
Цитата(Sun_ok @  2.12.2009,  19:14 Найти цитируемый пост)
Pitlord  Да, похоже это наиболее нормальный вариант, кроном раз в день проверять да и все, но ignore_user_abort мне не дает покоя, не могу с ним разобраться.

Зачем cron'ом?

Цитата(Sun_ok @  2.12.2009,  16:23 Найти цитируемый пост)
Как можно отследить, есть ли связь с клиентом или уже нет ?   

Чтобы не было недопониманий: что ты понимаешь под "связью с клиентом"? Процесс загрузки страницы или просто пребывание на сайте?

Автор: Sun_ok 2.12.2009, 20:27
Цитата(Pitlord @  2.12.2009,  19:31 Найти цитируемый пост)
Зачем cron'ом?

А как регулярно поверять возраст полей ? 

Цитата(Pitlord @  2.12.2009,  19:31 Найти цитируемый пост)
Чтобы не было недопониманий: что ты понимаешь под "связью с клиентом"? Процесс загрузки страницы или просто пребывание на сайте? 

Пребывание на сайте !

Автор: Ипатьев 2.12.2009, 20:36
Цитата(Sun_ok @  2.12.2009,  20:27 Найти цитируемый пост)
Пребывание на сайте ! 

То есть, вы предполагаете, что если пользователь открыл сайт у себя в браузере и после этого сервер выключили, то страница в браузере пропадет?

Автор: Sun_ok 2.12.2009, 20:48
Цитата(Ипатьев @  2.12.2009,  20:36 Найти цитируемый пост)
То есть, вы предполагаете, что если пользователь открыл сайт у себя в браузере и после этого сервер выключили, то страница в браузере пропадет? 


Вы правы, наверно нужно по другому сформулировать задачу. 
Человек зашел, запустилась сессия, человек вышел, через какой-то промежуток времени сессия закрылась, возможно ли запустить свой скрипт при закрытии сессии или проверять на ее существование ? 

Автор: Pitlord 2.12.2009, 21:07
Цитата(Sun_ok @  2.12.2009,  20:27 Найти цитируемый пост)
А как регулярно поверять возраст полей ? 

Код

DELETE FROM `tbl` WHERE `expire_date` < UNIX_TIMESTAMP();

Автор: Sun_ok 2.12.2009, 21:37
Цитата(Pitlord @  2.12.2009,  21:07 Найти цитируемый пост)
    
DELETE FROM `tbl` WHERE `expire_date` < UNIX_TIMESTAMP();

Это понятно, но задача в том чтобы регулярно это делать, можно конечно с юзер запроса это делать, но как-то не красиво.

Автор: Pitlord 2.12.2009, 21:45
Цитата(Sun_ok @  2.12.2009,  21:37 Найти цитируемый пост)
Это понятно, но задача в том чтобы регулярно это делать, можно конечно с юзер запроса это делать, но как-то не красиво. 

Почему некрасиво? Зачем что-то удалять, если на сайт никто не заходит?

Автор: Sun_ok 2.12.2009, 22:25
Тут специфика, на сайт может заходить хоть 1000 человек, но не использовать свои данные, и 1000 раз пускать запрос на очистку пустой таблицы, как-то нецелесообразно, или допустим если запускать проверку от тех пользователей которые загрузили свой текст, тогда данные буду лежать пока следующий юзер не воспользуется этим сервисом.

Автор: Pitlord 2.12.2009, 22:27
Цитата(Sun_ok @  2.12.2009,  22:25 Найти цитируемый пост)
Тут специфика, на сайт может заходить хоть 1000 человек, но не использовать свои данные, и 1000 раз пускать запрос на очистку пустой таблицы, как-то нецелесообразно, или допустим если запускать проверку от тех пользователей которые загрузили свой текст, тогда данные буду лежать пока следующий юзер не воспользуется этим сервисом.

Сделай timestamp общий для сайта, содержащий дату последней очистки. Если последняя очистка была давно — выполняй запрос и обновляй timestamp.

Автор: Sun_ok 2.12.2009, 22:36
Цитата(Pitlord @  2.12.2009,  22:27 Найти цитируемый пост)
Сделай timestamp общий для сайта, содержащий дату последней очистки. Если последняя очистка была давно — выполняй запрос и обновляй timestamp.

Это уже вариант, спасибо !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)