Браузер устанавливает куки при перенаправлении? - PullRequest
0 голосов
/ 05 мая 2018

Я думаю, что я делаю здесь неловкую ошибку, но я действительно не могу ее найти. Я использовал инструменты разработчика браузера и внимательно следил за каждым шагом. Это код, и я хочу, чтобы количество посещений сбрасывалось после нажатия на ссылку «Перезагрузить», но оно продолжает увеличиваться:

//test.php:
 <?php
if(isset($_COOKIE['visits']) && isset($_GET['restart'])){
    if($_GET['restart']=='true') {
        setcookie('visits',null,time()-24*3600*365,'/');
        unset($_COOKIE['visits']);
        header("Location: test.php");
        exit;
    }
}
if(!isset($_COOKIE['visits'])){
    $visits = 1;
    setcookie('visits',$visits,time()+24*3600*365);
    echo "Welcome To This Website";
}
else{
    $visits = $_COOKIE['visits']+1;
    setcookie('visits',$visits,time()+24*3600*365);
    echo "You've visited this website ".$_COOKIE['visits']. ' times before.<br>';
    echo "<a href='?restart=true'>Restart</a><br>";
}

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

1 Ответ

0 голосов
/ 05 мая 2018

В вашем коде похоже, что заголовок отправлен и пользователь перенаправлен до того, как установлен cookie. Вы можете попробовать буферизацию вывода и отобразить точку echo "."; непосредственно перед строкой header(..., чтобы обеспечить некоторую связь с клиентом, прежде чем они будут перенаправлены.

Редактировать: Я понимаю, что здесь происходит, так как заголовки cookie и перенаправления отправляются одновременно, но в некоторых комбинациях сервер / клиент перенаправление происходит до того, как браузер имеет возможность установить печенье. Передача некоторого содержимого в браузер вместе с заголовками дает ему возможность обработать cookie, но вы, очевидно, должны включить буферизацию вывода в своем php.ini или использовать ob_start() и ob_end_flush() до и после установки и отображения заголовка.

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