Intereting Posts
Использование встроенной функции MySQL в активных записях (codeigniter) Один элемент викторины на страницу (программа тестирования php / mysql) Загрузка большого видео с iphone на веб-сервер Ошибка pg_query, идущая непосредственно на консоль, в то время как pg_last_error ничего не возвращает Загрузка и отправка формы Php Продолжить саморазвитие в PHP или перейти к PHP Framework? Имеет ли значение длина имени переменной для производительности в PHP? Обновление версии Sagepay 2.22 до 3.00 – обновление PHP до шифрования AES Как получить доступ к массиву массивов в PHP Чтение в текстовом файле строки по строке php – новая строка не обнаружена Есть ли в PHP примерное сравнение строк? Тип жонглирования при проведении свободного сравнения дает нежелательный результат Массивы слияния PHP с значениями NOT DUPLICATED Сохранение данных в PHP / Mysql с встроенным редактированием в CKEditor PHP и транзакции PostgreSQL?

Проверьте, включены ли файлы cookie

Я работаю над страницей, для которой требуются javascript и сеансы. У меня уже есть код для предупреждения пользователя, если javascript отключен. Теперь я хочу обработать случай, когда файлы cookie отключены, так как идентификатор сеанса хранится в файлах cookie.

Я подумал о нескольких идеях:

  1. Внедрение идентификатора сеанса в ссылках и формах
  2. Предупредите пользователя, что они должны включать файлы cookie, если они отключены (потребуется помощь в обнаружении, если файлы cookie отключены)

Каков наилучший способ приблизиться к этому? благодаря

РЕДАКТИРОВАТЬ

Основываясь на связанных статьях, я придумал свой собственный подход и думал, что поделюсь, кто-то другой сможет его использовать, может быть, я получу несколько критических замечаний. (Предположим, что ваши хранилища сеансов PHP PHPSESSID cookie с именем PHPSESSID )

 <div id="form" style="display:none">Content goes here</div> <noscript>Sorry, but Javascript is required</noscript> <script type="text/javascript"><!-- if(document.cookie.indexOf('PHPSESSID')!=-1) document.getElementById('form').style.display=''; else document.write('<p>Sorry, but cookies must be enabled</p>'); --></script> 

JavaScript

В JavaScript вы просто проверяете свойство cookieEnabled , которое поддерживается во всех основных браузерах. Если вы работаете со старым браузером, вы можете установить cookie и проверить, существует ли он. (заимствовано у Модернизатора ):

 if (navigator.cookieEnabled) return true; // set and read cookie document.cookie = "cookietest=1"; var ret = document.cookie.indexOf("cookietest=") != -1; // delete cookie document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT"; return ret; 
  • Модернизатор cookie check commit
  • Проверка включения файлов cookie

PHP

В PHP он довольно «сложный», поскольку вам нужно обновить страницу или перенаправить на другой скрипт. Здесь я буду использовать два сценария:

somescript.php

 <?php session_start(); setcookie('foo', 'bar', time()+3600); header("location: check.php"); 

check.php

 <?php echo (isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar') ? 'enabled' : 'disabled'; 
  • Обнаружение, если куки включены с помощью PHP
  • PHP и Cookies, хорошее сочетание!

Но чтобы проверить, разрешены ли cookie с помощью isset ($ _ COOKIE ["cookie"]), вы должны обновиться. Я делаю это по-разному (с сеансами на основе куки 🙂

 session_start(); $a = session_id(); session_destroy(); session_start(); $b = session_id(); session_destroy(); if ($a == $b) echo"Cookies ON"; else echo"Cookies OFF"; 

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

Клиентский код (JavaScript)

 function showCookiesMessage(cookiesEnabled) { if (cookiesEnabled == 'true') alert('Cookies enabled'); else alert('Cookies disabled'); } $(document).ready(function() { var jqxhr = $.get('/cookiesEnabled.php'); jqxhr.done(showCookiesMessage); }); 

(Вызов JQuery AJAX можно заменить чистым вызовом JavaScript AJAX)

Серверный код (PHP)

 if (isset($_COOKIE['cookieCheck'])) { echo 'true'; } else { if (isset($_GET['reload'])) { echo 'false'; } else { setcookie('cookieCheck', '1', time() + 60); header('Location: ' . $_SERVER['PHP_SELF'] . '?reload'); exit(); } } 

В первый раз, когда скрипт вызывается, cookie устанавливается, и скрипт сообщает браузеру перенаправить на себя. Браузер делает это прозрачно. Перезагрузка страницы не выполняется, поскольку она выполняется в пределах области вызова AJAX .

Во второй раз, когда вызывается перенаправлением, если cookie получен, скрипт отвечает HTTP 200 (со строкой «true»), поэтому showCookiesMessage функция showCookiesMessage .

Если сценарий вызывается во второй раз (идентифицируется параметром «перезагрузка»), и cookie не получен, он отвечает HTTP 200 с строкой «false», и showCookiesMessage функцию showCookiesMessage .

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

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

JavaScript

Вы можете создать файл cookie с помощью JavaScript и проверить, существует ли он:

 //Set a Cookie` document.cookie="testcookie"` //Check if cookie exists` cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false` 

Или вы можете использовать плагин jQuery Cookie

 //Set a Cookie` $.cookie("testcookie", "testvalue") //Check if cookie exists` cookiesEnabled=( $.cookie("testcookie") ) ? true : false` 

Php

 setcookie("testcookie", "testvalue"); if( isset( $_COOKIE['testcookie'] ) ) { } 

Не уверен, что Php будет работать, поскольку я не могу его протестировать.

Вы можете сделать Ajax Call ( Примечание : для этого решения требуется JQuery):

example.php

 <?php setcookie('CookieEnabledTest', 'check', time()+3600); ?> <script type="text/javascript"> CookieCheck(); function CookieCheck() { $.post ( 'ajax.php', { cmd: 'cookieCheck' }, function (returned_data, status) { if (status === "success") { if (returned_data === "enabled") { alert ("Cookies are activated."); } else { alert ("Cookies are not activated."); } } } ); } </script> 

ajax.php

 $cmd = filter_input(INPUT_POST, "cmd"); if ( isset( $cmd ) && $cmd == "cookieCheck" ) { echo (isset($_COOKIE['CookieEnabledTest']) && $_COOKIE['CookieEnabledTest']=='check') ? 'enabled' : 'disabled'; } 

В результате появляется окно предупреждения, в котором показано, что cookie-файлы cookie включены или нет. Конечно, вам не нужно показывать окно предупреждения, отсюда вы можете предпринять другие шаги для устранения деактивированных файлов cookie.

легко определить, разрешены ли файлы cookie:

  1. установите cookie.
  2. получить файл cookie

если вы можете получить cookie, который вы установили, cookie включен, иначе нет.

Кстати: это плохая идея для Embedding the session id in the links and forms , это плохо для SEO. На мой взгляд, это не очень распространено, что люди не хотят включать файлы cookie.

Вот очень полезный и легкий плагин javascript для этого: js-cookie

 Cookies.set('cookieName', 'Value'); setTimeout(function(){ var cookieValue = Cookies.get('cookieName'); if(cookieValue){ console.log("Test Cookie is set!"); } else { document.write('<p>Sorry, but cookies must be enabled</p>'); } Cookies.remove('cookieName'); }, 1000); 

Работает во всех браузерах, принимает любого персонажа.

Куки-файлы на стороне клиента и не могут быть правильно протестированы с использованием PHP. Это базовая линия, и каждое решение – это обход для этой проблемы.

Если вы ищете решение проблемы с вашим файлом cookie, вы ошиблись. Не используйте PHP, используйте язык клиента, например Javascript.

Можете ли вы использовать файлы cookie с помощью PHP? Да, но вам нужно перезагрузить, чтобы сделать настройки на PHP «видимыми».

Например: можно ли проверить, может ли браузер установить Cookies с простым PHP? Единственный правильный ответ – «НЕТ».

Вы можете прочитать уже установленное Cookie: «YES» использовать предопределенный $ _COOKIE (копия настроек перед запуском PHP-приложения).