сессии и заголовки

Dillinger

Новичок
Пара вопросов:
1. Почему этот ужасный код работает, здесь перед отправкой заголовков есть и html, и echo, почему нету ошибки headers already sent?
2. Использую Apache, почему, если этот скрипт в корневой папке(\htdocs), то все работает, а если закинуть его в подкаталог(\htdocs\bla), то сессию можно только начать, но завершить невозможно?
PHP:
<a href='<?=$_SERVER['PHP_SELF']?>?del'>Завершить сессию</a>
<a href='<?=$_SERVER['PHP_SELF']?>?start'>Начать сессию</a>
<hr>

<?php
echo "вот массив _COOKIE:  ";
print_r($_COOKIE);

if(isset($_GET['del'])){
	setcookie ("PHPSESSID","");
	header("Location: {$_SERVER['PHP_SELF']}");
}
if(isset($_GET['start'])){
	session_start();
	header("Location: {$_SERVER['PHP_SELF']}");
}
?>
 

Фанат

oncle terrible
Команда форума
1. output buffering
2. не надо трогать сессионные куки руками.
для завершения сессии есть штатные функции.

если есть какие-то вопросы - смотрим глазами заголовки.
 

Dillinger

Новичок
1. output buffering
2. не надо трогать сессионные куки руками.
для завершения сессии есть штатные функции.
Спасибо за ответ, почитал про output buffering. Есть мнения, что не стоит использовать ob, там где можно обойтись без него и этим самым сэкономить ресурсы серверу, но с другой стороны, поскольку при использовании ob в браузер идет сразу весь html-код, а не по кусочкам, это ускоряет отображение страницы у клиента. Что весомее?
Насчет сессионных кук, здесь тоже неясно. Если стоит задача завершить сессию то, как я понял, обычно используется session_destroy(), а кука session_name=session_id так и остается у клиента не подчищенной, это правильный подход?
А как вы определяете, что он работает?
print_r($_COOKIE) выводит в зависимости от действий либо Array ( [PHPSESSID] => 7777777aaaaa7777 ) либо Array ( ).
 

Фанат

oncle terrible
Команда форума
Ничего.
Не нужно рассуждать о таких виртуальных вещах, как "ресурсы серверу" и "отображение страницы у клиента".
Когда появятся проблемы с отображением страницы у клиента, вызванные именно скоростью отдачи её сервером - тогда и думать об этом.
Когда появятся проблемы с "ресурсами сервера", вызванные именно использованием об - тогда и думать об этом.
Подсказка: не появятся.

Программа, которая посылает хтмл код раньше НТТР заголовков - криво спроектирована.
Это единственная весомая причина делать так, чтобы при выключенном буфферинге ошибок не было все равно.
 

Фанат

oncle terrible
Команда форума
session_name=session_id так и остается у клиента не подчищенной, это правильный подход?
никогда не запаривался на эту тему.
вообще, по нынешним временам, на практике сессию никто никогда не завершает. а у клиента вечно висит кука с его идентификатором для автоматической авторизации.

поэтому, опять же - давай ты не будешь озабочиваться виртуальными воображаемыми проблемами?
 

Dillinger

Новичок
поэтому, опять же - давай ты не будешь озабочиваться виртуальными воображаемыми проблемами?
Да, это точно. На моем текущем уровне знания гораздо важнее понимать, как правильно, а как криво и как это все бывает на практике.
 
Сверху