ВопросCOOKIE для анонимных пользователей
Есть модуль:
function my_module_menu(){ $items['any_page'] = array( 'title' => '', 'access callback' => TRUE, 'page callback' => 'my_module_func', 'page arguments' => array(1,), 'type' => MENU_SUGGESTED_ITEM, ); $items['show_result'] = array( 'title' => '', 'access callback' => TRUE, 'page callback' => 'my_module_show', ); return $items; } function my_module_func($_arg = 0){ if($_arg) { setcookie('mark', $_arg, 0x7FFFFFFF, '/'); } drupal_goto('show_result'); } function my_module_show(){ $out = 0; if (isset($_COOKIE['mark'])) { $out = $_COOKIE['mark']; } return $out; }
Открываю в трех браузерах, в одном логинюсь, в двух других нет.
Допустим,
Chrome - залогиненый.
Safari и Opera - не залогиненые.
В Chrome перехожу на страницу my_site.dev/any_page/100.
Соответственно, на странице my_site.dev/show_result вижу:
В Chrome отображается 100.
Safari 0
Opera 0
В Safari перехожу на страницу my_site.dev/any_page/200
Обновляю все три.
Chrome 100.
Safari 200
Opera 200..
То есть, я понимаю, что cookie записываются для анонимов одинаковые.
Как записать их индивидуально?
- npoxop
- 11.11.2013
- 6750
Комментарии
Куки записываются для каждого браузера отдельно. Просто вы пишете в куки для анонимов одно и то же число. Попробуйте заменить 200 на rand(1, 1000); и увидите сами.
Я знаю, что куки записываются в браузере и должны быть индивидуальны), но похоже drupal их каждый раз переписывает вытаскивая из какой-то своей таблицы. Если вы внимательно посмотрите в мой пример, то увидите, что куки "200" я записываю на странице my_site.dev/any_page/200, а смотрю их на странице my_site.dev/show_result. Браузером Opera я вообще не захожу на страницу где устанавливаются куки, однако они появляются на странице результата. Вопрос заключался именно в этом, как добиться стандартного поведения куков используя drupal).
Друпал нигде не хранит куки, это 100%. Он хранит только пользовательские сессии.
Посмотрите в куки оперы, возможно, они просто берутся из одного хранилища. Я не очень в курсе как распределяются куки между браузерами в ОС, но это точно не нюанс Друпала.
Нет, браузеры никак не связаны друг с другом. Для чистоты эксперимента открывал на разных машинах, всё работает так же. Подозреваю, что drupal хранит сессии в куках, называет их "пользовательские сессии" и хранит это в БД. Я не хочу обременять вас, но если вам не лень, попробуйте сами создать такой модуль и убедитесь, что всё так, как я описываю.
Друпал не хранит сессии в куках, только id сессии. А сами данные сессии по умолчанию хранятся в бд.
Обращаю ваше внимание, что седьмой Друпал по дефолту не создаёт сессии для анонимов вообще.
А как включить создание сессий для анонимных пользователей в друпале 7??
у меня такая же проблема когда кеширование для анонимов включено
Комментировать