Как сохранить сессию / cookie в Drupal 6 на компьютере посетителя

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

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

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

Спасибо


person Sbhambry    schedule 22.08.2009    source источник
comment
Пользователи авторизованы?   -  person googletorp    schedule 23.08.2009
comment
Поиск могут выполнять как анонимные, так и вошедшие в систему пользователи. По сути, сайту просто нужно запомнить поиск, выполненный ранее тем же человеком, и выдать набор результатов по умолчанию.   -  person Sbhambry    schedule 24.08.2009


Ответы (3)


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

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

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

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

person FGM    schedule 23.08.2009

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

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

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

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'];
}
?>
person John Fiala    schedule 25.08.2009
comment
-1. Это очень хорошее описание файлов cookie, но вопрос был задан по поводу фреймворка Drupal. В этом ответе не обсуждаются сеансы в Drupal, и он может вызвать путаницу при попытке интеграции с ним. - person Jeremy French; 25.08.2009
comment
Я бы сказал, что -1 - это слишком жестко ... Я нашел ответ очень полезным, и это в сочетании с ответом выше действительно помогает прояснить довольно много вещей. Я бы сказал только спасибо, Джон :) - person Sbhambry; 25.08.2009
comment
Я отвечал по поводу фреймворка Drupal, и я действительно обсуждал сеансы в Drupal в первом абзаце. То есть вы не можете использовать сеанс для хранения вещей для анонимных посетителей в Drupal, потому что он привязан к объекту пользователя. Итак, я объясняю, как использовать файлы cookie, которые будут работать с анонимными посетителями. - person John Fiala; 26.08.2009
comment
В ответе FGM выше похоже, что мы можем использовать сеанс для хранения данных даже для анонимных пользователей. - person AgA; 26.12.2011
comment
Я нашел эту ссылку, в которой говорится, что сеанс создается даже для анонимных пользователей, за исключением того, что он создается после второго посещения: - person AgA; 26.12.2011

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

пример:

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

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

print_r($_COOKIE);

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

print $_COOKIE['myCookieName'];

Ваше здоровье!

person R.Aubin    schedule 03.06.2010