[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите (session)
serzh
Сделал я сайт. У меня он разбит на 5 блоков (header, left, index, right and footer). Установил систему регистрации. Вывод изображения и имени посетителя отображается у правом блоке. Если я открываю сессию у самом начале правого блока, то мне выдает ошибку перед авкою пользователя (хотя вход был осуществлен и все работает):

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at T:\home\localhost\wenst\bloki\left.php:79) in T:\home\localhost\wenst\bloki\right.php on line 1


Если я открываю сессию у шапке сайта (header), то ошибки не выдает и пользователь без проблем заходит на сайт. Но когда пользователь авторизированый, то ОН НЕ ВИДЕТ КОММЕНТАРИЕВ и не пашет система оценки файлов. А если лазить по сайту не авторизированым то видно коментарии и оценка файлов работает.

Помогите решить эту проблему, а то у меня скоро крыша поедит!!!



Спустя 8 часов, 29 минут, 20 секунд (14.02.2010 - 06:37) NewBePhp написал(а):
вот есть коммент который и говорит о вашей ошибке:

Cannot send session cache limiter - headers already sent подобная ошибка частенько выплывает при запуске сессии. Одни из причин подобной ошибки это то что перед session_start() поподают пробелы или html теги. Постарайтесь перенисти функцию до включения файлов include и require.

Спустя 36 минут, 48 секунд (14.02.2010 - 07:14) qpayct написал(а):
Это может быть только по той причине, что как тебе и сказал товарищ выше, происходит вывод перед отсылкой хеадера. Это может быть по нескольким причинам:
1. Ты экранишь эхо и т.п до сессии.
2. Файл не сохранен в without BOM (по стандарту обычно Ansi)
Вроде бы все...
Ну и если уж очень надо и никак иначе, то только в этом случае пользуемся спец.функкциями ob_start() ob_end_flush() если ничего не напутал smile.gif а такое тоже возможно

Спустя 1 день, 12 часов, 58 минут, 16 секунд (15.02.2010 - 20:12) serzh написал(а):
ДА У МЕНЯ СТРАНИЦА (right.php) начинается со <? start_session(); ?> и никакие пробелы, теги или функции include или header перед ними не стоят. Вот например код страницы:

<?
session_start();

include ("bd.php");

if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password'",$db);
$myrow = mysql_fetch_array($result);
//извлекаем нужные данные о пользователе
}
?>

<td width="230" valign="top"><div style="padding:3px;
margin:5px;"
><img src="img/pan.jpg" width="220" height="40"><div style="border:3px solid #666666;
border-top-width:0px;
border-bottom-width:0px;
background-image:url(img/rew1.jpg);"
><br>


<?
if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
//проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.

print <<<HERE
<form action="testreg.php" method="post">
<!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post" -->
<div style="text-align:center;"><input name="login" type="text" size="20" style="color:#363636; border:1px solid #DFAA38; padding:1px; font-size:12px; background-color:#FFFFFF;" value="Ваш ник..." onFocus="this.value=''; this.style.color='#000000'; this.style.background='#FFFFFF'" onblur="this.style.background='#FFFFFF'; if (this.value=='') {this.value='Ваш ник...'; this.style.color='#000000'}" size="15" maxlength="15"

HERE;


if (isset($_COOKIE['login'])) //есть ли переменная с логином в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его логин уже вписан в нужную графу
echo ' value="'.$_COOKIE['login'].'">';
}


print <<<HERE
</div>
<!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->
<div style="text-align:center; margin-top:15px;"><input size="20" name="password" type="password" style="color:#363636; padding:1px; font-size:12px; border:1px solid #DFAA38; background-color:#FFFFFF;" value="Пароль..." onFocus="this.value=''; this.style.color='#000000'; this.style.background='#FFFFFF'" onblur="this.style.background='#FFFFFF'; if (this.value=='') {this.value='Пароль...'; this.style.color='#000000'}" size="15" maxlength="15"

HERE;


if (isset($_COOKIE['password']))//есть ли переменная с паролем в в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
{
//если да, то вставляем в форму ее значение. При этом пользователю отображается, что его пароль уже вписан в нужную графу
echo ' value="'.$_COOKIE['password'].'">';
}

print <<<HERE
</div>
<!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль -->




<div style="margin-top:15px;" align="center">
<input type="submit" name="submit" value="Войти">
<!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php -->
</div></form>
<div align="center" style="margin-top:10px; "><p style="text-align:center;">Вы вошли на сайт, как гость.</p></div><br>

HERE;
}

else
{
//при удачном входе пользователю выдается все, что расположено ниже между звездочками.
//************************************************************************************


print <<<HERE
<div>
<div align="center">Здравствуйте,<p style='color:#000066; margin-bottom:5px; margin-top:10px; font-size:14px;'>
<strong>
$_SESSION[login]</strong>!</p></div>
<div align="center"><a>Ваш аватар:
<p style='margin-top:10px; margin-bottom:15px;'><img alt='
$_SESSION[login]' src='$myrow[avatar]'></p></div></div><br>
<!-- Выше отображается аватар. Его адрес содержит переменная
$myrow[avatar] -->

<!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->


HERE;


//************************************************************************************
//при удачном входе пользователю выдается все, что расположено ВЫШЕ между звездочками.

}
?>

</div>
<
img style="margin-top:-20px; padding-top:0px;" src="img/mu2.jpg" width="220" height="20"><br><br>


<
img src="img/poi2.jpg" style="margin-bottom:-5px;" width="220" height="40">
<
div style="border:3px solid #666666; border-top-width:0px; border-bottom-width:0px; background-image:url(img/rew1.jpg);"><br>

<
div style="text-align:center; margin-left:7px; padding-bottom:5px; margin-right:7px;
margin-top:10px;"
>

<
form action="poisk.php" method="post" name="form_poisk">


<
c style="margin-top:10px;"><input name="poisk" type="text" size="17" maxlength="40"><input style="padding-right:4px; margin-left:5px;" name="submit_poisk" type="submit" value="Go"></c>
</
form>

<
br><br>
</
div></div>
<
img style="margin-top:-20px; padding-top:0px;" src="img/mu2.jpg" width="220" height="20"><br><br>




<
img src="img/cal.jpg" style="margin-bottom:-5px;" width="220" height="40">
<
div style="border:3px solid #666666; border-top-width:0px; border-bottom-width:0px; background-image:url(img/rew1.jpg); color:"><br>

<
html>


<
head>








<
style type="text/css">


.
main {


width:200px;




}


.month {
padding:6px;


font:bold 12px verdana;


color:#000033;


}


.daysofweek {
padding:4px;
font:bold 12px verdana;


color:#FF0000;


}


.days {


font-size: 12px;


font-family:verdana;


color:black;



padding: 4px;


}


.days #today{


font-weight: bold;


color:#0000FF;


}


</style>


<
script type="text/javascript" >function buildCal(m, y, cM, cH, cDW, cD, brdr){


var mn=['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'];


var dim=[31,0,31,30,31,30,31,31,30,31,30,31];


var oD = new Date(y, m -1, 0); //DD replaced line to fix date bug when current day is 31st


oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st


var todaydate=new Date() //DD added


var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0 //DD added


dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;


var t='<div class="'+cM+'"><table class="'+cM+'" cols="7" cellpadding="0" cellspacing="0"><tr align="center">';


t+='<td colspan="7" align="center" class="'+cH+'">'+mn[m-1]+' - '+y+'</td></tr><tr align="center">';


for(s=0;s<7;s++)t+='<td class="'+cDW+'" >'+"ПВСЧПСВ".substr(s,1)+'</td>';


t+='</tr><tr align="center">';


for(i=1;i<=42;i++){


var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : ' ';


if (x==scanfortoday) //DD added


x='<span id="today">'+x+'</span>' //DD added


t+='<td class="'+cD+'">'+x+' </td>';


if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';


}


return t+='</tr></table></div>';


}


</script> </head>








<
script type="text/javascript">


var todaydate=new Date()


var curmonth=todaydate.getMonth()+1 //get current month (1-12)


var curyear=todaydate.getFullYear() //get current year


</script>


<
table align="center" border="0" cellspacing="0" cellpadding="0">


<
tr>





<
td align="center" width="210px">


<
script>


document.write(buildCal(curmonth ,curyear, "main", "month", "daysofweek", "days", 1));


</
script></td>



</
tr>


</
table>


</
body>


</
html>
<
br>
</
div>
<
img style="margin-top:-11px; padding-top:0px;" src="img/mu2.jpg" width="220" height="20"><br><br>


<
img src="img/stat.jpg" style="margin-bottom:-5px;" width="220" height="40">
<
div style="border:3px solid #666666; border-top-width:0px; border-bottom-width:0px; background-image:url(img/rew1.jpg);"><br><br><br>
</
div>
<
img style="margin-top:-11px; padding-top:0px;" src="img/mu2.jpg" width="220" height="20"><br><br>


<
img src="img/rek.jpg" style="margin-bottom:-5px;" width="220" height="40">
<
div style="border:3px solid #666666; border-top-width:0px; border-bottom-width:0px; background-image:url(img/rew1.jpg);"><br>


<
MARQUEE onmouseover=this.stop() onmouseout=this.start() scrollAmount=1 scrollDelay=1 direction=up width=210 height=70 border=1>
<
script language="JavaScript" src="run-js.php"></script>



</
MARQUEE>


</
div>
<
img style="margin-top:-11px; padding-top:0px;" src="img/mu2.jpg" width="220" height="20"><br><br>



</
div></td>
?>

Спустя 29 минут, 40 секунд (15.02.2010 - 20:41) Kuliev написал(а):
serzh
Возможно у Вас пробел перед <?

Спустя 2 часа, 13 минут, 1 секунда (15.02.2010 - 22:54) serzh написал(а):
нет ничего. Я из-за этой регистрации уже на месяц отложил вылаживание сайта на сервер. Если кто-то шарит в php, а в особенности в этих сессиях - помогите плиз. В долгу не останусь. Моя ася: 593-999-516.

Спустя 18 часов, 18 минут, 50 секунд (16.02.2010 - 17:13) serzh написал(а):
Так, ошибку выдает из-за того, что мой правый блок подключается функциею include к центральной части сайта. Я поставил start_session в начале этой страницы, перед подключением блоков. Но таких страниц у меня очень много. Мне, что начинать сессии на всех страницах или есть другой способ?

Спустя 4 минуты, 47 секунд (16.02.2010 - 17:18) Adil написал(а):
Сессию начинай в header, если у тебя такой имеется..

Спустя 3 часа, 26 минут, 9 секунд (16.02.2010 - 20:44) serzh написал(а):
да я же написал, что если я открываю сессию у header, то авторизированый пользователь не видет комментариев и не может оценить файл, а неавторизированый - наоборот!!!!

Спустя 1 минута, 35 секунд (16.02.2010 - 20:46) serzh написал(а):
хотя header также подключается к страницам через функцию include!

Спустя 16 часов, 38 минут, 19 секунд (17.02.2010 - 13:24) qpayct написал(а):
ну ты тормоз

Спустя 12 часов, 54 минуты, 35 секунд (18.02.2010 - 02:19) serzh написал(а):
если ты такой умный, то напиши почему у меня авторизированый пользователь не видет комментариев к заметкам!!!!!

Спустя 4 минуты, 2 секунды (18.02.2010 - 02:23) serzh написал(а):
вопрос - снят, материал - розжован!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.