|
|
|
|
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at z:\home\test1.ru\www\SQL\TDtxt\script.php:8) in z:\home\test1.ru\www\SQL\TDtxt\script.php on line 122
|
как с этим боротся? | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 15:10)
| | Следует поместить session_start() в самом начале скрипта.
Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1127
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=837
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=2003
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1603
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
http://www.softtime.ru/group/id_group=12 | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 15:10)
| | перед session_start ничего не должно быть.
Проверьте на наличие пробелов, если перед session_start есть какой-нибудь include его нужно спустить после вызова этой функции.
у вас session_start вызывается из 122 строки сценария. А в 8 строчке уже что-то выводится в браузер. | |
|
|
|
|
|
|
|
для: Axxil
(18.02.2005 в 15:34)
| | вот так все работает без нареканий
<?php
$name = "User";
if($action=='')
{
session_start();
$_SESSION['name'] = $name;
echo 'Привет, '.$_SESSION['name']."<br>";
echo "<a href=".$PHP_SELF."?action=next>На следующую страницу </a>";
}
elseif($action=='next')
{
session_start();
echo $_SESSION['name'].' , ты пришел на другую страницу этого сайта!';
echo("<br>");
echo "<a href=".$PHP_SELF."?action=next2>На следующую страницу </a>";
}
elseif($action=='next2')
{
session_start();
unset($_SESSION['name']);
echo 'Привет, '.$_SESSION['name'];
session_destroy();
}
?>
|
так что товарищ Axxil вы неправы | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 16:57)
| | Axxil имеет ввиду вывод в браузер, т.е. когда вы в строке 122 вызываете session_start(), PHP рапортует о невозможности отослать заголовки, так как в строке 8 у вас стоит оператор echo
<?php
echo "<a href=".$PHP_SELF."?action=next>На следующую страницу </a>";
?>
|
который заставляет сервер отослать HTTP-заголовки.
PS Попробуйте перед <?php поставить пробел - и у вас опять не будут отправляться заголовки. | |
|
|
|
|
|
|
|
для: cheops
(18.02.2005 в 17:23)
| | тоесть session_start() нужно поставить в начеле скрипта. примерно таким образом:
<?php
session_start();
$name = "User";
if($action=='')
{
$_SESSION['name'] = $name;
echo 'Привет, '.$_SESSION['name']."<br>";
echo "<a href=".$PHP_SELF."?action=next>На следующую страницу </a>";
}
elseif($action=='next')
{
echo $_SESSION['name'].' , ты пришел на другую страницу этого сайта!';
echo("<br>");
echo "<a href=".$PHP_SELF."?action=next2>На следующую страницу </a>";
}
elseif($action=='next2')
{
unset($_SESSION['name']);
echo 'Привет, '.$_SESSION['name'];
session_destroy();
}
?>
|
верно? | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 17:55)
| | тогда при наличии других переменных $_SESSION[] где лучше поставить session_destroy()? | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 18:00)
| | Это зависит от характера Web-приложения, иногда session_destroy() вообще не вызывается и сессии умирают самостоятельно... | |
|
|
|
|
|
|
|
для: cheops
(18.02.2005 в 18:06)
| | Да, кстати есть такое понятие как время жизни сессии?
То есть может сессия умереть если долго не обновлять страницу? | |
|
|
|
|
|
|
|
для: Axxil
(18.02.2005 в 18:08)
| | Она умрёт даже если страница пергружается, обычно время её жизни выставляют в пределах нескольких часов или итого меньше http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=773 | |
|
|
|
|
|
|
|
для: cheops
(18.02.2005 в 18:11)
| | Там по ссылке написано что время жизни выставляет аднинистратор.
Где его можно выставить в php.ini? | |
|
|
|
|
|
|
|
для: Axxil
(18.02.2005 в 18:16)
| | В php.ini имеется директива
session.gc_maxlifetime = 1440
|
которая указывает, через сколько секунд сессия будет помечена как отжившая и подлежащая уничтожению сборщиком мусора.
Кроме того, можно использовать директиву session.cookie_lifetime для указания времени жизни cookie в которой хранится идентификатор сессии, если он равен 0, то данная cookie храниться только до момента выключения браузера (сессионная cookie).
session.cookie_lifetime = 3600
|
| |
|
|
|
|
|
|
|
для: cheops
(18.02.2005 в 18:06)
| | а через сколько сессия умерает? | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 18:11)
| | вот еще вопрос:
как бы мне вот в этот блок,
elseif($action=='next2')
{
unset($_SESSION['name']);
echo 'Привет, '.$_SESSION['name'];
session_destroy();
}
|
вставить <META HTTP-EQUIV=Refresh CONTENT=0; URL=обратно в первый блок>
я вставляю таким образом:
echo "<META HTTP-EQUIV=Refresh CONTENT=0; URL=".$PHP_SELF.">";
или
echo "<META HTTP-EQUIV=Refresh CONTENT=0; URL=script.php>";
но получается что он циклично грузит все тотже третий блок | |
|
|
|
|
|
|
|
для: Be4ep
(18.02.2005 в 18:28)
| | прошу прощенья сам ощибся с кавычками | |
|
|
|