PHP Чтение файлов cookie, созданных с помощью setcookie () - PullRequest
6 голосов
/ 10 ноября 2010

Из руководства :

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

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

Я не могу изменить код рядом с вызовом setcookie в текущей кодовой базе.Таким образом, подобное решение не будет работать:

setcookie('test', 'my test value');
$_COOKIE['test'] = 'my test value';

Ответы [ 4 ]

7 голосов
/ 10 ноября 2010

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

Вы можете переопределить встроенную функциональность setcookie с помощью runkit_function_redefine(), но если вы не будете очень осторожны, вы можете открыть для себя мир боли.

6 голосов
/ 10 ноября 2010

Вместо этого вы можете использовать сеанс, и он будет доступен немедленно и ограничит объем данных, сохраняемых в cookie, так как он будет просто хранить идентификатор сеанса. Вы также можете использовать сложные данные.

<?php
$_SESSION['my_var'] = 'something';
$_SESSION['another_var'] = array(1, 2, 3);

$my_var = $_SESSION['my_var'];
echo $my_var;
?>
2 голосов
/ 10 ноября 2010

Или вы можете создать целевую страницу и перенаправить ее, если файл cookie не настроен для принудительной отправки куки.

1 голос
/ 07 июля 2012

Трюк для обновления содержимого cookie без перезагрузки всей страницы делает Ajax-запрос, потому что его HTTP-заголовок ответа обновит cookie.Например:

PHP / HTML

<?php setcookie('test', 'my test value', 0, '/'); ?>

<a href="#" id="see-cookie">See the cookie content updated</a>

Ajax-запрос с JQuery

$("#see-cookie").click( function() {

    $.ajax({

        url: "/ajax/ajax_test.php",
        success: function(html){

            alert(html);

        }

    });

});

PHPкоторый получает запрос Ajax

$new_cookie = 'Updated at ' . date('H:i:s') . ' - ' . $_COOKIE['test'];

setcookie('test', $new_cookie, 0, '/');

echo $new_cookie;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...