Проверьте, включены ли файлы cookie
Я работаю над страницей, на которой требуются javascript и сеансы. У меня уже есть код для предупреждения пользователя, если javascript отключен. Теперь я хочу обработать случай, когда файлы cookie отключены, поскольку идентификатор сеанса хранится в файлах cookie.
Я подумал о нескольких идеях:
- Вставка идентификатора сеанса в ссылках и формах
- Предупреждать пользователя, что они должны включать файлы cookie, если они отключены (потребуется помощь при обнаружении, если файлы cookie отключены)
Каков наилучший способ приблизиться к этому? Благодаря
ИЗМЕНИТЬ
Основываясь на связанных статьях, я придумал свой собственный подход и подумал, что хочу поделиться, кто-то другой сможет его использовать, может быть, я получу несколько критических замечаний. (Предположим, что ваши хранилища сеансов PHP в файле 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>
Ответы
Ответ 1
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;
PHP
В PHP он довольно "сложный", поскольку вам нужно обновить страницу или перенаправить на другой script. Здесь я буду использовать два сценария:
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';
Ответ 2
Но проверить, разрешены ли cookie с помощью isset ($ _ COOKIE [ "cookie" ]), вы должны обновить.
Im делает это ths way (с сеансами на основе файлов 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";
Ответ 3
Прозрачный, чистый и простой подход, проверка доступности файлов 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();
}
}
В первый раз вызывается script, cookie устанавливается, а script указывает браузеру перенаправлять на себя. Браузер делает это прозрачно. Перезагрузка страницы не выполняется, поскольку она выполняется в пределах области вызова AJAX.
Во второй раз, когда вызывается перенаправлением, если cookie получен, script отвечает HTTP 200 (со строкой "true" ), поэтому вызывается функция showCookiesMessage
.
Если вызов script вызывается во второй раз (идентифицируется параметром "перезагрузка" ), и cookie не принимается, он отвечает HTTP 200 со строкой "false", а функция showCookiesMessage
вызывается.
Ответ 4
Вы не можете установить один и тот же загрузочный набор и проверить, установлены ли файлы cookie, вы должны выполнить страницу перезагрузки:
- PHP работает на сервере;
- cookie на клиенте.
- файлы cookie, отправленные на сервер только во время загрузки страницы.
- Только что созданные файлы cookie еще не отправлены на сервер и будут отправляться только при следующей загрузке страницы.
Ответ 5
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 будет работать, поскольку я не могу его протестировать.
Ответ 6
Вы можете сделать Ajax-вызов ( Примечание: для этого решения требуется 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.
Ответ 7
легко определить, включены ли файлы cookie:
- установить файл cookie.
- получить файл cookie
если вы можете получить установленный файл cookie, cookie
включен, в противном случае нет.
Кстати: это плохая идея для Embedding the session id in the links and forms
, это плохо для SEO.
По-моему, не очень распространено, что люди не хотят включать файлы cookie.
Ответ 8
Вот очень полезный и легкий плагин 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);
Работает во всех браузерах, принимает любой символ.
Ответ 9
Cookies являются клиентскими и не могут быть правильно протестированы с использованием PHP.
Что базовая линия и каждое решение являются оберткой для этой проблемы.
Значение, если вы ищете решение для своей проблемы с cookie, вы ошиблись. Не используйте PHP, используйте язык клиента, например Javascript.
Можете ли вы использовать файлы cookie с помощью PHP? Да, но вам нужно перезагрузить, чтобы настройки на PHP были "видимыми".
Например: можно ли проверить, может ли браузер установить Cookies с простым PHP? Единственный правильный ответ - "НЕТ".
Вы можете прочитать уже установленное Cookie: "YES" использовать предопределенный $_COOKIE (копия настроек перед запуском PHP-приложения).