php start_session () не работает для localhost - PullRequest
2 голосов
/ 25 декабря 2009

Я только начал делать этот файл .php, и я не могу понять, почему он выдает это предупреждение

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\xampplite\htdocs\projectchest\controlpanel\index.php:1) in C:\Program Files\xampplite\htdocs\projectchest\controlpanel\index.php on line 2

Вот мой php.

<?php
    session_start();
    require_once('../classes/users/BaseUser.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   ...
</html>

А вот и доступ к моему файлу php.ini

pastebin dot com / f60d22891 извините, я не могу опубликовать две ссылки, потому что какая-то чушь спама

Я также обнаружил, что эта тема предположила, что мои настройки доступа испорчены. я попробовал это ... не повезло Не удалось запустить сессию PHP

Ответы [ 3 ]

4 голосов
/ 25 декабря 2009

Сеансы в PHP основаны на cookie (для передачи session_id) .

Файлы cookie отправляются в виде заголовков HTTP.

Заголовки HTTP можно отправлять только в том случае, если выходные данные еще не отправлены.

Получаемое сообщение об ошибке указывает на невозможность отправки куки-файла сеанса, поскольку некоторые выходные данные уже отправлены.


Это означает, что вы должны быть уверены, что не отправили любой выход (даже ни одного пробела!) до вызова session_start().


Пара идей:

  • убедитесь, что перед открывающим тегом php нет пустой строки
  • убедитесь, что ваш PHP-скрипт не закодирован в UTF-8 с BOM (некоторые редакторы по умолчанию помещают это в начало файлов)
    • т.е. повторно сохраните ваш файл (как UTF-8, почему бы и нет) , без спецификации


Как примечание: вы можете получить эту ошибку на некоторых серверах, а не на некоторых других, из-за конфигурации output_buffering: если она включена (она выключена в вашем файле php.ini) , PHP будет хранить некоторые данные в памяти перед их отправкой - это означает, что заголовки могут быть отправлены, даже если небольшое количество данных, кажется, уже отправлено (На самом деле, этот небольшой объем данных сохраняется в память, а не сразу отправлено) .

1 голос
/ 25 декабря 2009

Скорее всего, проблема кодировки символов (если быть точным, спецификация UTF 8). Попробуйте преобразовать исходный файл php в UTF-8 без спецификации. Какой редактор вы используете?

0 голосов
/ 25 декабря 2009

Существует также директива session.auto_start в php.ini (см. Руководство) , которая позаботится об обмене файлами cookie и настройке сеанса, как только PHP отправит заголовки HTTP. Не так настраиваемо, но это решение наименьшего расстояния.

...