Запуск сеанса, но выдача ошибки ограничения кеша

63
6

Привет, я получаю эту ошибку за последние несколько дней, я уже охочусь в поиске Google и нашел следующее решение для сессии, но это тоже не работает для меня

Warning
: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/user/public_html/pages/about-us.php:65) in
/home/user/public_html/pages/inc/header.php

<?php
session_set_cookie_params(0, '/', '.mysite.com');
session_start();
?>

спросил(а) 2021-01-25T19:38:29+03:00 5 месяцев назад
1
Решение
63

Решение 1. Вызовите session_start() прежде чем что-либо будет напечатано на выходе

session_start() должен быть самым первым кодом на вашей странице. Сессию можно запустить только до того, как сервер отправит самый первый байт в браузер, поскольку информация о сеансе отправляется в заголовках, а изменение заголовков запрещено после отправки первого байта. Таким образом, как только первый байт покидает сервер, нет возврата. Поэтому убедитесь, что нет ничего, даже белого пространства:

<?php
session_start();
...
?>

Например, следующее не будет работать

Hello world.

<?php
session_start();
/* Warning occures here because "Hello world." text
* was already sent to the browser.*/
?>

Такая же проблема со следующим кодом:

<?php
echo "Hello world."
session_start();
/* Warning occures here because "Hello world." text
* was already sent to the browser.*/
?>

Однако, все в порядке:

<?php
session_start();
echo "Hello world."
?>

Также вы можете сделать что угодно до начала сеанса, что не приведет к печати на выходе. Например, вы можете сделать следующее без каких-либо проблем:

<?php
$i = 5;
session_start();
?>

Решение 2. Используйте буферизацию вывода

Если вы не хотите запускать сеанс в начале запроса, но вы хотите сделать это в более поздней точке, вам придется использовать выходной буфер. Буфер вывода гарантирует, что контент, который будет обычно отправляться в браузер почти сразу, будет вместо этого буферизироваться на стороне сервера, а затем отправляться в браузер в целом, как только вся страница будет готова или в кусках - на основе того, как вы на самом деле ее используете. Уменьшение - это то, что пользователю придется подождать, пока страница немного дольше. Вы можете запустить буфер вывода, вызвав:

<?php
ob_start();
?>

Но убедитесь, что этот код вызывается до того, как что-либо напечатано, т.е. Сделайте это самой первой командой. Позже, как только вы закончите с session_start или любыми другими модификациями заголовков HTTP или как только ваша страница будет полностью сгенерирована, просто вызовите

<?php
ob_end_flush();
?>

для завершения буферизации вывода и распечатки того, что находится в буфере.

ответил(а) 2021-01-25T19:38:29+03:00 5 месяцев назад
-4

Просто попробуйте с этим:

<?php
ob_start();
session_start();
?>

надеюсь, вы решите свою проблему.

ответил(а) 2021-01-25T19:38:29+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема