Как сохранить сессию / cookie в Drupal 6 на компьютере посетителя - PullRequest
5 голосов
/ 23 августа 2009

Я создал поиск веб-сайта клиента, используя модуль Finder вместе с модулем Views. Проблема заключается в том, что мой клиент хочет, чтобы каждый раз, когда пользователь выбирал и осуществлял поиск предприятий в определенной области, он сохранялся в виде сеанса или файла cookie на компьютере посетителя. Это гарантирует, что повторный посетитель увидит тот же поиск, который он делал ранее. Пожалуйста, проверьте сайт: http://naplesres.designbracket.com/

Кроме того, я также хочу знать, могу ли я на основе ранее выполненного поиска настроить настройки просмотров таким образом, чтобы только остальные бизнес-объекты, находящиеся в его регионе, передавались в остальных представлениях, используемых на веб-сайте, т.е. и т. д.

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

Спасибо

Ответы [ 3 ]

10 голосов
/ 25 августа 2009

Если вам нужно что-то отслеживать и работать с пользователем, который не вошел в систему, вам нужно использовать cookie для отслеживания этого. Вы не можете использовать сеанс для хранения вещей для анонимных посетителей в Drupal, потому что он привязан к объекту пользователя.

Здесь есть описание - http://www.w3schools.com/PHP/php_cookies.asp - но позвольте мне войти в него.

Вы начинаете с использования setcookie (name, value, expire) - мы предполагаем, что мы хотим вызвать это значение business_search, и мы будем использовать тестовое значение '80204', которое является почтовым индексом - это работает так же хорошо, если вы используете «Денвер, CO». Мы не хотим, чтобы срок его действия истек, о, шесть месяцев, поэтому мы хотели бы позвонить:

setcookie('business_search', '80204', time() + 3600 * 24 * 180);

Это время представляет собой примерно шесть месяцев, которые добавляются к времени прямо сейчас.

После этого получить cookie еще проще - просто используйте $ _COOKIE ['business_search'], и он вернет значение. Итак, мы могли бы просто использовать этот код:

<?php
function saveSerch($search_term) {
  setcookie('business_search', $search_term, time() + 3600 * 24 * 180);
}

function readSearch() {
  return $_COOKIE['business_search'];
}
?>
3 голосов
/ 03 июня 2010

Если у вас возникли проблемы с сохранением файлов cookie на стороне клиента в Drupal, попробуйте использовать дополнительный параметр path.

пример:

setcookie('myCookieName', 'myCookieData', 0, '/');

Затем на следующей странице загрузки выведите ваши куки на экран. Вы должны увидеть ваш файл cookie в выводе.

print_r($_COOKIE);

или, более конкретно,

print $_COOKIE['myCookieName'];

Ура!

3 голосов
/ 23 августа 2009

Конечно, это можно сделать, но это не нормальный способ сделать это на Drupal. Обычно вы сохраняете информацию либо в сеансе (используйте sess_write / sess_read), либо, если пользователь вошел в систему, в информацию учетной записи пользователя.

Хранение информации в куки означает, что она может быть подделана на стороне клиента, и вам нужно будет сделать ваш код более надежным, как и любые данные, созданные пользователем.

Если вы сохраните это в сеансе, оно будет сохраняться до тех пор, пока сеанс живет, но после этого исчезнет. Для анонимных пользователей лучшего способа нет. OTOH, для зарегистрированных пользователей сохранение информации в $user->data означает, что они будут доступны, пока вы их не удалите, потому что они будут храниться в таблицах users.

Также помните, что cookie-файлы сеанса drupal регенерируются при переходе от анонимного к вошедшему в систему, но сохраняют содержимое сеанса, чтобы вы могли помещать данные в анонимный сеанс и сохранять их при входе пользователя в систему, а затем сохранять их в данные его аккаунта. Посмотрите на includes/session.inc для деталей о том, как это работает.

...