Невозможно отправить ограничитель кеша сеанса - заголовки уже отправлены [дубликаты]

Возникла проблема с сессиями, которая становится очень раздражающей. Каждый раз, когда я пытаюсь начать сеанс на определенной странице, я получаю следующую ошибку:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ............ on line 23

используя этот код:

<?php
session_start();
if(isset($_SESSION['user']))
    {
        $user = $_SESSION['user'];
        echo "$user";
    }
else
    {
    }
?> 

Это предполагает, что я уже использовал session_start(); ? Я осмотрелся, но ничего не проясняет это для меня.

Спасибо


person user1039878    schedule 11.01.2012    source источник
comment
(вывод начался с ............ в строке 23 Что в строке 23?   -  person Paul Dessert    schedule 11.01.2012
comment
Строка 23 — это 'session_start();' немного кода выше.   -  person user1039878    schedule 11.01.2012
comment
В моем случае мне пришлось установить кодировку файла без спецификации.   -  person Wessam El Mahdy    schedule 06.05.2016


Ответы (1)


«Заголовки уже отправлены» означает, что ваш скрипт PHP уже отправил заголовки HTTP, и поэтому он не может вносить в них изменения сейчас.

Прежде чем звонить session_start, убедитесь, что вы не отправляете НИКАКОЙ контент. Еще лучше, просто сделайте session_start первым, что вы делаете в своем PHP-файле (поэтому поместите его в абсолютное начало, перед всем HTML и т. д.).

person houbysoft    schedule 11.01.2012
comment
Поместите ‹?php session_start(); ?› прежде всего, и это сработало, спасибо! :) - person user1039878; 11.01.2012
comment
Пожалуйста, позвольте мне поделиться еще одним открытием. Если вы делаете документы PHP, убедитесь, что ‹?php является первым символом, а не табуляцией или пробелом. Это решило мои проблемы. - person bryanblackbee; 17.02.2013
comment
В моем случае - я создал новый документ, вставил содержимое и работает. Проблема заключалась в том, что во включенном файле был включен знак utf (bom). - person Michal - wereda-net; 25.06.2014
comment
Мне нужно было изменить кодировку моего документа с UTF-8 на ANSI. UTF-8 имеет скрытый метку порядка следования байтов перед началом содержимого файла, так что был отправлен до того, как session_start успел сделать свое дело. - person AaronSieb; 21.09.2015
comment
У меня была такая же проблема, как у AaronSieb. Поменял кодировку файла на UTF-8 без BOM и все заработало! - person GiorgiTBS; 12.02.2016
comment
Убедитесь, что вы НЕ используете notepad.exe для сохранения (редактирования) таких файлов. Он вставляет спецификацию UTF8 в самое начало файла. Обычно это вызывает такое предупреждение php с номером строки 1. - person lukyer; 25.03.2016
comment
в моем случае удаление пробелов в конце строки из включения решило проблему; (vim) :%s#\s\+$## (см. также bryansis2000 выше) - person zzapper; 26.04.2016
comment
@bryansis2010 ты спас мой день! салют! - person adadion; 10.05.2017
comment
в моем случае перед тегом ‹?php стоял символ p. Таким образом, файл контроллера имел это в начале p‹?php - person vishwakarma09; 13.06.2017
comment
@user1039878 user1039878 Это действительно все, что мне нужно сделать? У меня та же проблема. Session_start, наверное, подключен к oauthcallback.php? - person kelly; 28.08.2017
comment
В моем случае я использовал Session_start вместо session_start. - person M at; 25.12.2017
comment
Я изменил кодировку utf-ascii моего файла, и это сработало. - person Jaskaran Singh; 14.01.2018
comment
@bryansis2010 искал, в чем проблема, потому что я уже поместил session_start() сверху, но все равно это не сработало. Ваш комментарий решил огромную проблему для меня. - person arslion; 09.02.2018
comment
@blackbeelabs спасибо! Я смотрел на один и тот же код целую вечность!!! - person Tunna182; 11.09.2018