2011-01-25 2 views
1

Каков наилучший способ узнать, разрешены ли файлы cookie в браузере. Я пробовал:Тест для файлов cookie в PHP

<?php 

     setcookie('cookies','yes',time()+7200); 
    if (!isset($_COOKIE['cookies'])) { 
     echo '<div class="error" style="float:right;">You must enable cookies and Javascript to use this site.</div>'; 
    } else { 
     echo ''; 
    } 


?> 

, но иногда он отображает предупреждение, даже если файлы cookie включены. Мне нужно только предупреждение, если файлы cookie НЕ включены.

+0

Cookies не работают таким образом. См. [Проблема с обнаружением файлов cookie в PHP] (http://stackoverflow.com/questions/4563819/problem-with-cookies-detection-in-php). – Gumbo

ответ

6

Причина, по которой ваш код не работает, заключается в том, что файлы cookie отправляются с запросом. Код, который вы пытаетесь, будет работать, но setcookie должен быть в другом запросе, чем вызов isset. Попробуйте вызвать переадресацию между вызовами этих двух функций.

+0

Есть ли вообще сделать это без перенаправления? Может быть, другой подход? – sehummel

+1

Nope. Вам нужно будет сделать как минимум 2 запроса для проверки. – Maerlyn

+1

@ shummel7845: нет, файлы cookie должны быть переданы. – Jonah

2

Это связано с тем, что ваши файлы cookie установлены одновременно с отправкой вашего запроса в браузер. Это означает, что даже если setcookie() выполнен до скрипт заканчивает куки, устанавливаются после браузер получил запрос.

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

Более гибким решением будет проверка javascript.

Смежные вопросы