Сохранить историю сеансов пользователей после ухода (определенный тайм-аут) - PullRequest
1 голос
/ 13 сентября 2011

Я ищу способ легко сохранить историю просмотров пользователя, посетившего мой сайт, после того, как он покинул этот сайт. Сохраняя это, я хочу связать страницы вместе, которые были посещены во время сеанса пользователя. Таким образом, я могу получить корреляцию между различными страницами.

Причина, по которой я хочу сохранить данные в конце сеанса, - производительность . Мне не нужны накладные расходы на запись в таблицы (с возможной интенсивной индексацией) при каждой загрузке страницы. Кроме того, сохранение в конце сеанса (или после ухода с сайта) имеет то преимущество, что пауки поисковых систем (у которых нет состояния / сеанса) могут быть легко отфильтрованы (у них всегда будет не более одной страницы в истории сеансов) .

Sidenote: я использую фреймворк Yii в PHP 5.3 для своего сайта.

Я подумал о нескольких решениях моей проблемы:

  1. Сделайте запрос ajax в onbeforeunload, когда пользователь покидает сайт.

    Я проверяю, остается ли пользователь на сайте, устанавливая переменную в каждом событии onclick для <a> с атрибутом href, который ссылается на внутреннюю страницу. Метод javascript для этого, к сожалению, не является надежным из-за кнопок браузера «назад» и «вперед» (которые не устанавливают эту переменную) . Имеет дополнительное преимущество, что данные сеанса обычно доступны во время этого «последнего (ajax) запроса».

  2. Напишите мой собственный обработчик сеансов

    Это было бы более громоздким решением. Я еще не использовал пользовательский обработчик сеансов в Yii, и я немного не уверен, смогу ли я (например) легко загрузить и обработать данные сеанса с истекшим сроком, прежде чем они будут удалены в переопределенной функции gcSession () . Также этот метод может быть запущен, когда новый пользователь заходит на веб-сайт, оставляя ему дополнительное время загрузки для одновременной обработки нескольких сеансов (что я хотел бы предотвратить) .

  3. Использовать запланированное задание / cron yob

    В этом есть преимущества обоих, но есть риск использования большого количества ресурсов ЦП. Я также подозреваю, что это потребует много дополнительной обработки. Для этого решения я все еще хотел бы использовать инфраструктуру Yii и (если возможно) тот же контекст приложения для выполнения cron yob.

Я был бы очень признателен за любую информацию, которая может помочь мне сделать выбор между вышеуказанным решением. Может быть, я упустил решение или возможность? Я действительно хотел бы запустить событие в установленное время ожидания в PHP, не заставляя пользователя ждать, как, например, с sleep(). В общем, я считаю, что асинхронное выполнение в PHP (инициируемое из одного синхронного запроса) - это то, что я ищу. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

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

Когда сеанс истекает (как записать это событие? Я не знаю, возможно, это возможно), вы сохраняете в БД посещенные страницы. Вы также можете записать их во временный файл, который затем обрабатывается заданием cron в течение ночи, если вы боитесь слишком большой нагрузки на сервер.

Я одобряю реакцию Арен в отношении HTML / ajax, это слишком безумно и ненадежно. Я думаю, вы можете сделать это лучше на стороне сервера.

0 голосов
/ 14 сентября 2011
  1. Абсолютно нет.Вы столкнетесь с проблемами совместимости браузера.Без огня (пропуски зажигания) с определенными операциями просмотра, такими как закрытие вкладок или закрытие приложений, возврат вперед / назад.Нет, просто нет.Не говоря уже о последствиях для безопасности .... НИКОГДА НЕ ДОВЕРЯЙТЕ КЛИЕНТУ

  2. Я действительно не думаю, что это вообще разумно.Вы собираетесь пройти через беспредел, просто чтобы сохранить свои сессии организованными, особенно когда речь идет о соединении сессий.Это может быть интересное глубокое погружение во внутренности yii, но лично я не чувствую, что оно подходит.

  3. В конечном счете, это единственное решение в моих глазах.Я не понимаю, где вы думаете, это будет большая загрузка процессора.Вы можете выполнить это через YII, используя командную строку YII ( Docs ), которая должна иметь возможность прокручивать ваш веб-материал.

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

Вот только у меня 2c

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