Как проверить, какие пользователи принимают файлы cookie?

Я хочу проверить, какие пользователи принимают файлы cookie, чтобы получить примерный процент пользователей, которые принимают файлы cookie на одном из наших PHP-сайтов.

Моя идея состоит в том, чтобы создать временный столбец acceptsCookies в таблице пользователей, чтобы помочь отслеживать это (например, если пользователь принимает файлы cookie, тогда его acceptsCookies будет установлено на «Y», в противном случае оно будет установлено на «N»).

Как я могу сделать это на одной странице (установить тестовый файл cookie, проверить, был ли он принят/установлен, обновить БД)?

Обновление: чтобы было ясно, это должно быть сделано на 100% в PHP.


person ProgrammerGirl    schedule 14.11.2011    source источник
comment
Звучит несложно, JavaScript также может устанавливать и читать куки. Попробуйте сделать это сами, а если застрянете, приходите сюда за помощью с более конкретной проблемой. Это сайт вопросов/ответов, а не сайт "создай мой код для меня".   -  person Madara's Ghost    schedule 14.11.2011
comment
@Truth: я не могу использовать Javascript, поэтому я указал PHP и не пометил Javascript.   -  person ProgrammerGirl    schedule 14.11.2011
comment
Тогда вы также должны указать в своем вопросе, что вы не можете использовать JavaScript.   -  person Madara's Ghost    schedule 14.11.2011
comment
@Truth: Пожалуйста, перестаньте отвечать, ваше общее отношение и голосование против вас совсем не помогают. Кажется, вы единственный, кто не понял вопроса, поскольку у меня уже есть два полезных ответа, один из которых является очень умным решением того, что я искал. В следующий раз ничего не предполагай.   -  person ProgrammerGirl    schedule 14.11.2011
comment
2 вещи, 1. Я ничего не минусовал. Никогда не обвиняйте, если вы не уверены. 2. Это сайт с очень высоким рейтингом (с точки зрения поисковой оптимизации), и пользователи, которые ищут тот же вопрос, что и ваш, могут запутаться в ответах, потому что ваш вопрос только похож на их. Я был здесь некоторое время, и минимальный стандарт для вопросов здесь разумная читабельность и понятность. И не говори о моем отношении, ты мне не платишь, и я тебе ничего не должен. Мои комментарии здесь, чтобы помочь вам и другим пользователям, а не унизить или унизить вас.   -  person Madara's Ghost    schedule 14.11.2011
comment
Ваш вопрос вводит в заблуждение из-за невыполнимого требования сделать это в одном запросе. О чем также спрашивали и отвечали раньше: Without-a-page-reload">Можно ли проверить, включены ли у пользователя файлы cookie в php без перезагрузки страницы?   -  person mario    schedule 14.11.2011
comment
@Truth: На самом деле, да, вы проголосовали против. Вы были единственным просмотром, когда понизили меня до -1 и оставили свой первый комментарий выше. Кроме того, не путайте непонимание других со своим собственным, особенно если английский не является вашим родным языком. Наконец, написание Это звучит не очень сложно, попробуйте сделать это сами, а не сайт, где я создаю свой код, совершенно бесполезен для меня и любого другого человека, которому вы, возможно, пытаетесь помочь. Чтобы доказать, что вы ошибаетесь, у меня уже есть решение. Так что не стесняйтесь продолжать говорить с собой, чтобы помочь другим, поскольку я уже нашел то, что ищу.   -  person ProgrammerGirl    schedule 14.11.2011
comment
На самом деле, нет, я не проголосовал против, и чтобы доказать это вам, я действительно проголосую за это, чтобы вы могли засвидетельствовать. Также вы должны понимать, что вы не первый, кто задает подобные вопросы, и если вам нужна помощь, вы должны очень четко понимать, что вам нужно. Вопрос, на который не стоит обращать внимание, может доказать обратное добавлением одного-единственного предложения. Как я уже сказал, никто здесь, особенно я, не собирается вас унижать. Но не стоит переходить в наступление и нападать на людей. Удачи.   -  person Madara's Ghost    schedule 14.11.2011


Ответы (3)


Вы не можете сделать это за один шаг, так как файл cookie должен быть сначала ОТПРАВЛЕН в браузер, и он будет отправлен вам только в последующем запросе. Итак, если у вас было что-то вроде:

<?php
    session_start();
    session_write_close(); // unlock session file so checkcookie.php below won't block.
    setcookie(...);
?>
<html>
<body>

<img src="checkcookie.php" width="0" height="0" />

у вас может быть сценарий checkcookie.php, обновляющий значение acceptsCookie вашего сеанса.

person Marc B    schedule 14.11.2011
comment
Очень умно, Марк, спасибо. Итак, просто для подтверждения, это будет сделано на одной странице? - person ProgrammerGirl; 14.11.2011
comment
Да, так как изображение запускает отдельный запрос к серверу. Лично я бы просто проверил запрос второй страницы, поскольку использование ресурса для этой цели кажется немного «сомнительным», хотя это сработает. - person halfer; 14.11.2011
comment
Технически две страницы. Одна страница устанавливает файл cookie, затем, когда браузер запрашивает этот сценарий изображения, ваш сервер автоматически получает файл cookie, установленный главной страницей, при условии, что браузер разрешает файлы cookie. - person Marc B; 14.11.2011
comment
@Marc B: Но что касается пользователя, только одна страница, верно? - person ProgrammerGirl; 14.11.2011
comment
Да. Однако это просто сообщает вашему серверу о возможностях файлов cookie на минуту или две раньше. Файл cookie ВСЕ ЕЩЕ будет отправлен по ЛЮБОМУ запросу, сделанному пользователем на вашем сайте, и эти страницы также могут выполнить обновление в этот момент. Думайте об этом как о ресторане, который принимает заказы, но не беспокоится о том, что вы делаете заказ по мобильному телефону, стоя перед входной дверью. - person Marc B; 14.11.2011

С PHP вы не можете сделать это на одной странице. Другой вариант - проверить javascript, а затем отправить вызов ajax на другую страницу php:

<script>
   var tmpcookie = new Date();
   chkcookie = (tmpcookie.getTime() + '');
   document.cookie = "chkcookie=" + chkcookie + "; path=/";
    if (document.cookie.indexOf(chkcookie,0) < 0) {
      //AJAX CALL IN HERE SAYING NO COOKIES
      }
    else {
      //AJAX CALL IN HERE SAYING ACCEPTING COOKIES
    }
</SCRIPT>
person Clint    schedule 14.11.2011
comment
Извините, я не знал, что вы не можете использовать javascript. Виноват. - person Clint; 14.11.2011

PHP сам по себе не может определить, принял ли пользователь файл cookie или нет на отдельной странице.

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

person Madara's Ghost    schedule 14.11.2011