Нам нужно использовать session_write_close () внутри множества существующих кодов.Но это выглядит опасно для нас, потому что PHP делает следующее - без каких-либо предупреждений или ошибок:
session_name('goodoldasdf');
session_start();
if (!empty($_SESSION['var'])) {
print ' Session-Data: '. $_SESSION['var'];
}
$_SESSION['var'] = "before";
session_write_close();
$_SESSION['var'] = "after"; // notice: definition after write close!
print ' B: '. $_SESSION['var'];
Когда мы определяем SESSION-var после session_write_close, PHP не записывает SESSION в обработчик сеанса MemcacheD(как и ожидалось), но он все еще использует перезапись в той же самой среде выполнения сценария.
Вывод: "Pseudo-Session-Data: после ".
второй прогон:
Вывод: "Данные сеанса: до Данные псевдосеанса: после "
Вопрос в следующем: Как убедиться, что PHP не использует псевдо SESSION-переменных, которые фактически не записываются в сессии? Есть ли способ получить предупреждения PHPВот?Или есть какие-либо предложения по решению этой проблемы?
Почему нам нужно добавлять закрывающую запись везде: После обновления «PHP 5.x» до «PHP 7» все замедляется.Особенно на AJAX-запросах или одновременной загрузке мульт-вкладок.Это потому, что PHP 7, похоже, меняет свою обработку / блокировку SESSION.
Очень хорошая демонстрация: https://demo.ma.ttias.be/demo-php-blocking-sessions/
Так что нам нужно добавить session_write_close для большого количества сценариев - без риска недопустимых сеансов -значения.