Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Cannot send session cache limiter - headers already sent
 
 автор: Kain   (30.04.2006 в 17:43)   письмо автору
 
 

Начинаю програмить на PHP.
Сижу разбираюсь с сессиями. Написал такой код.

<body>
<html>
<?
  Error_Reporting
(E_ALL & ~E_NOTICE);    
  
session_start();
  
session_register("per"); 
  
$per=$HD;            
  echo (
"мое имя: $per");
?>
<form action = "http://localhost/1s.php" method="get">
   HDD: <input type="text" name="HD"/><br>
<input type="submit"/>
<a href="2s.php">На следующую страницу </a>
</body>
</html>


Все работает. Но выдается такая ошибка:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\1s.php:5) in z:\home\localhost\www\1s.php on line 5

Как ее исправить?

   
 
 автор: Евгений Петров   (30.04.2006 в 18:23)   письмо автору
 
   для: Kain   (30.04.2006 в 17:43)
 

Старт сессии должен происходить до любого вывода в браузер. Или поместите блок
<body> 
<html>

после вызова функции session_start() или буферизируйте вывод:
<?
  ob_start
();
?>
<body> 
<html> 
<? 
  Error_Reporting
(E_ALL & ~E_NOTICE);     
  
session_start(); 
  
session_register("per"); 
  
$per=$HD;             
  echo (
"мое имя: $per"); 
?> 
<form action = "http://localhost/1s.php" method="get"> 
   HDD: <input type="text" name="HD"/><br> 
<input type="submit"/> 
<a href="2s.php">На следующую страницу </a> 
</body> 
</html>
<?
  $buffer 
ob_get_contents();
  
ob_clean();
  echo 
$buffer;
?>

   
 
 автор: Kain   (01.05.2006 в 01:38)   письмо автору
 
   для: Евгений Петров   (30.04.2006 в 18:23)
 

Спасибо большое.
Хм. еще один вопрос.
Если удалить из строки URL в браузере значения HD перменной то сессия завершается.
Так и надо? Я думал пока сессию не прервешь переменная per будет хранить данные о пользователе.

   
 
 автор: cheops   (01.05.2006 в 11:56)   письмо автору
 
   для: Kain   (01.05.2006 в 01:38)
 

Как вы определяете, что сессия завершается?

   
 
 автор: Kain   (01.05.2006 в 18:23)   письмо автору
 
   для: cheops   (01.05.2006 в 11:56)
 

Переменная PER становится пустой, хотя очищается переменая HD, вот и подумал что сессия закончена.

   
 
 автор: Kain   (01.05.2006 в 21:45)   письмо автору
 
   для: Kain   (01.05.2006 в 18:23)
 

Я прально понял что для того что бы переменная Per сохранялась при выходе из браузера и вспоминалась когда юзер заходит на страничку надо использовать куки?
Тогда такой вопрос.
Когда пишу такой скрипт

<?
  $counter
++;
  
setcookie("counter",$counter);
  echo(
"Вы посетили эту страницу $counter раз");
?>


Выдает вот это:


Notice: Undefined variable: counter in z:\home\localhost\www\c.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\c.php:2) in z:\home\localhost\www\c.php on line 3
Вы посетили эту страницу 1 раз 

И не считает количество сессий.(все сделал по учебнику). Что не так?

   
 
 автор: cheops   (01.05.2006 в 11:55)   письмо автору
 
   для: Kain   (30.04.2006 в 17:43)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12
http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Вы можете также включить буфферизацию, если имеете доступ к конфигурационному файлу php.ini
output_buffering = On  

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования