Я ищу способ легко сохранить историю просмотров пользователя, посетившего мой сайт, после того, как он покинул этот сайт. Сохраняя это, я хочу связать страницы вместе, которые были посещены во время сеанса пользователя. Таким образом, я могу получить корреляцию между различными страницами.
Причина, по которой я хочу сохранить данные в конце сеанса, - производительность . Мне не нужны накладные расходы на запись в таблицы (с возможной интенсивной индексацией) при каждой загрузке страницы. Кроме того, сохранение в конце сеанса (или после ухода с сайта) имеет то преимущество, что пауки поисковых систем (у которых нет состояния / сеанса) могут быть легко отфильтрованы (у них всегда будет не более одной страницы в истории сеансов) .
Sidenote: я использую фреймворк Yii в PHP 5.3 для своего сайта.
Я подумал о нескольких решениях моей проблемы:
Сделайте запрос ajax в onbeforeunload
, когда пользователь покидает сайт.
Я проверяю, остается ли пользователь на сайте, устанавливая переменную в каждом событии onclick
для <a>
с атрибутом href
, который ссылается на внутреннюю страницу. Метод javascript для этого, к сожалению, не является надежным из-за кнопок браузера «назад» и «вперед» (которые не устанавливают эту переменную) . Имеет дополнительное преимущество, что данные сеанса обычно доступны во время этого «последнего (ajax) запроса».
Напишите мой собственный обработчик сеансов
Это было бы более громоздким решением. Я еще не использовал пользовательский обработчик сеансов в Yii, и я немного не уверен, смогу ли я (например) легко загрузить и обработать данные сеанса с истекшим сроком, прежде чем они будут удалены в переопределенной функции gcSession () . Также этот метод может быть запущен, когда новый пользователь заходит на веб-сайт, оставляя ему дополнительное время загрузки для одновременной обработки нескольких сеансов (что я хотел бы предотвратить) .
Использовать запланированное задание / cron yob
В этом есть преимущества обоих, но есть риск использования большого количества ресурсов ЦП. Я также подозреваю, что это потребует много дополнительной обработки. Для этого решения я все еще хотел бы использовать инфраструктуру Yii и (если возможно) тот же контекст приложения для выполнения cron yob.
Я был бы очень признателен за любую информацию, которая может помочь мне сделать выбор между вышеуказанным решением. Может быть, я упустил решение или возможность? Я действительно хотел бы запустить событие в установленное время ожидания в PHP, не заставляя пользователя ждать, как, например, с sleep()
. В общем, я считаю, что асинхронное выполнение в PHP (инициируемое из одного синхронного запроса) - это то, что я ищу. Есть предложения?