PHP session_start () не может создать сессию - PullRequest
1 голос
/ 21 октября 2010

Это мои первые 5 строк в моем index.php:

  <?php
session_start();
if (!isset($_SESSION['cart'])) $_SESSION['cart']='';
$page = $_GET['page'];
?>

и так далее .. Я смотрю на сессии через плагин firefox-> firebug-> firecookie, а сессия не создается (я уверен в этом, потому что корзина, которая работала вчера, не работает сегодня). Есть идеи, почему это может произойти и как это исправить?

Я нашел это при включении ошибок: Предупреждение: session_start () [function.session-start]: не удается отправить cookie сеанса - заголовки уже отправлены (вывод начался с /home/controll/public_html/metalkonsult.com/index.php:1) в / home / controll / public_html /metalkonsult.com/index.php в строке 2

Я исследовал дальше - что-то отправлено в браузер, но я не знаю, откуда оно. Я сделал var_dump (headers_list ()); на первой строке и вот что я получаю:

array(2) { [0]=> string(23) "X-Powered-By: PHP/5.2.6" [1]=> string(23) "Content-type: text/html" }

Как мне это отключить? Что это отправляет?

Я установил session.auto_start = 1 в php.ini в папке сайта сеансы работают сейчас .. Не знаю, что вызвало проблемы, но проблема временно устранена

Ответы [ 6 ]

8 голосов
/ 21 октября 2010

Если пробел, который я вижу перед открывающим тэгом php (

Вы можете проверить с помощью firebug точный вывод, перейдя на вкладку net, обнаружив передачу PHP-файла, развернув его и увидев вкладку Response. Вы можете поместить отпечаток сразу после session_start и посмотреть, где он появляется ... это должно быть самое первое.

В противном случае, если у вас есть ошибки php, направленные на вход в систему, зайдите в журнал и посмотрите, есть ли в нем что-то. Наконец, убедитесь, что браузер также отображает сеансовые куки: некоторые браузеры их не отображают.

5 голосов
/ 21 октября 2010

Сначала в браузер отправляется что-то, что вызывает отправку заголовков. Проверьте код, чтобы убедиться, что перед вашим PHP-кодом нет ни одного пробела.

2 голосов
/ 21 октября 2010

Некоторые редакторы добавляют невидимую метку порядка байтов UTF-8 в начале файла. В зависимости от различных версий серверного программного обеспечения, оно может отправляться или не отправляться в браузер. Не могли бы вы проверить шестнадцатеричный дамп вашего исходного кода и убедиться, что первые 5 байтов равны 3c 3f 70 68 70?

1 голос
/ 21 октября 2010

Это первая страница PHP, или она включена с другой?

Если это первый, попробуйте включить output_buffering на php.ini. После этого вы сможете увидеть, что было отправлено ранее, позвонив по номеру ob_get_contents()

.
1 голос
/ 21 октября 2010

У меня работает.Убедитесь, что у вашего сервера есть доступ на запись в папку, в которой хранятся данные сеанса (проверьте путь сеанса: http://php.net/manual/en/function.session-save-path.php)

      <?php
    session_start();
    $_SESSION['cart'] = "test<br />";
    print $_SESSION['cart'];
    if (!isset($_SESSION['cart'])) $_SESSION['cart']='';
    print $_SESSION['cart'];
//blank it out
    if (isset($_SESSION['cart'])) $_SESSION['cart']='';
    print $_SESSION['cart'];
    ?>

output

test
test

@ Palantir: И пробел нене имеет значения.

0 голосов
/ 02 декабря 2016

У меня была эта проблема, вызванная двумя разными вещами:

1 - в начале файла была пустая строка, если php 5.2 выдвинул предупреждение «заголовки уже отправлены».

http://board.phpbuilder.com/showthread.php?10310794-RESOLVED-Warning-session_start()-Cannot-send-session-cookie-headers-already-sent

, если <? Php находится во второй строке вашего скрипта, а над ним пустая строка, то это может вызвать проблемы, такие как не работает функция заголовка php. </p>

2 - PHP output_buffering был отключен по умолчанию.Если вы используете виртуальный хостинг и код работает на localhost, возможно, это может быть причиной.просто установите эти параметры в php.ini или локальном .user.ini

output_buffering = 4096

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