Почему я получаю эту ошибку PHP session_start ()?

Я не могу понять, почему я получаю эту ошибку сеанса …

Предупреждение: session_start () [function.session-start]: Не удается отправить ограничитель кеша сеанса – уже отправленные заголовки (вывод запущен в C: \ webserver \ htdocs \ project2 \ labs \ form-submits \ index.php: 2) в C: \ webserver \ htdocs \ project2 \ labs \ form-submits \ index.php в строке 2

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

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

<?php session_start(); require('formkey.class.php'); $formKey = new formKey(); $error = 'No error'; //Is request? if($_SERVER['REQUEST_METHOD'] == 'post') { //Validate the form key if(!isset($_POST['form_key']) || !$formKey->validate()) { //Form key is invalid, show an error $error = 'Form key error!'; } else { //Do the rest of your validation here $error = 'No form key error!'; } } ?> <!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"> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Securing forms with form keys</title> </head> <body> <div><?php if($error) { echo($error); } ?> <form action="" method="post"> <dl> <?php $formKey->outputKey(); ?> <dt><label for="username">Username:</label></dt> <dd><input type="text" name="username" id="username" /></dd> <dt><label for="username">Password:</label></dt> <dd><input type="password" name="password" id="password" /></dd> <dt></dt> <dd><input type="submit" value="Submit" /></dd> <dl> </form> </body> </html> 

файл класса

 <?php class formKey { //Here we store the generated form key private $formKey; //Here we store the old form key private $old_formKey; //The constructor stores the form key (if one excists) in our class variable function __construct() { //We need the previous key so we store it if(isset($_SESSION['form_key'])) { $this->old_formKey = $_SESSION['form_key']; } } //Function to generate the form key private function generateKey() { $ip = $_SERVER['REMOTE_ADDR']; $uniqid = uniqid(mt_rand(), true); return md5($ip . $uniqid); } //Function to output the form key public function outputKey() { //Generate the key and store it inside the class $this->formKey = $this->generateKey(); //Store the form key in the session $_SESSION['form_key'] = $this->formKey; //Output the form key echo "<input type='hidden' name='form_key' id='form_key' value='".$this->formKey."' />"; } //Function that validated the form key POST data public function validate() { //We use the old formKey and not the new generated version if($_POST['form_key'] == $this->old_formKey) { //The key is valid, return true. return true; } else { //The key is invalid, return false. return false; } } } ?> 

Related of "Почему я получаю эту ошибку PHP session_start ()?"

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

EDIT: На данный момент я думаю, что session_start () выдает ошибку, прежде чем он сможет отправить отправленный cookie. Ранняя ошибка будет отправлена ​​в браузер и не будет отправлена ​​печенье. Однако в этом случае вы должны увидеть более раннюю ошибку на экране. Я знаю, что это, вероятно, не проблема, но я не могу придумать, что еще может вызвать проблему.

у вас, вероятно, есть пробелы в верхней части index.php .. прямо перед <? тег, может быть пространством …, которое вызовет его. php очень тонко об этом … session_start должен быть вызван до выхода любого выхода …