setcookie() для google chrome. Запускается асинхронно?

223
01 июня 2018, 11:20

Моя проблема связана с установкой Cookie для отслеживания начала новых сессий пользователей в браузере Google Chrome.

В браузере Firefox и Yandex описанная ниже логика работает корректно, в Chrome - чаще работает не корректно, от чего это зависит мне пока не понятно.

Для отладки использую локальный сервер OpenServer.

При первом запуске браузера создаётся новая сессия для сайта. Если Cookie последней сессии в этот момент нет я создаю эту куку с длительностью жизни 10 лет (setcookie()). Делаю это для того, чтобы при очередном запуске браузера можно было определить наличие у пользователя сессии в прошлом. В куку последней сессии 'phpSessIdLast' помещаю значение текущей сессии (session_id()).

После закрытия браузера пользователем и очередного запуска того же сайта на том же браузере должна создаться новая сессия (создаётся) и должна существовать Cookie последней сессии (существует), но эта Cookie почему-то равна текущей сессии (в преобладающем большинстве случаев), такого быть не должно. Напоминаю, что такое поведение наблюдается только в браузере Google Chrome.

Если закомментировать код в 12 строке, то состояние Cookie последней сессии остаётся ожидаемым. Создаётся ощущение, что функция setcookie() из 12 строки запускается асинхронно.

<?
session_start();
$statusOfNewSession = 0;
$_SESSION['phpSessId'] = session_id();
$expireTenYear = time() + 60 * 60 * 24 * 356 * 10; // + 3560 дней
if ($_COOKIE['phpSessIdLast']) // - > Если есть кука последней сессии
{
    if ($_SESSION['phpSessId'] !== $_COOKIE['phpSessIdLast']) // - > Если текущая сессия не совпадает с кукой последней сессии
    {
        setcookie('phpSessIdLast', $_SESSION['phpSessId'], $expireTenYear, '/', null, false, true);
        $statusOfNewSession = 1;
    }
    else
        $statusOfNewSession = 2;
}
else
{
    setcookie('phpSessIdLast', $_SESSION['phpSessId'], $expireTenYear, '/', null, false, true);
    $statusOfNewSession = 3;
}
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
echo $statusOfNewSession;
READ ALSO
Yii2 &amp; codeception (Константа из модели)

Yii2 & codeception (Константа из модели)

Условная модель с константой:

186
на php приходит json равный null

на php приходит json равный null

Пытаюсь получить данные в формате json, приходит null

183
Запаковка программы в исполняемый файл exe

Запаковка программы в исполняемый файл exe

У меня есть cmd скрипт для работы моего php кода из консолиВ этой же папке находится файл конфига и папка с php интерпретатором для, собственно,...

183