Подтвердить что ты не робот

Проверьте, включены ли файлы 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>
4b9b3361

Ответ 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-приложения).