[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессии в php
ak167
Написал простой скрипт сессий. При вводе логина и пароля скрипт выведет сообщение "Привет, Имя!", если данные не введены, тогда просто "Привет!".
Если логин admin и пароль 12345, то выводится надпись "Вы имеете права админа".
Но при запуске почему-то постоянно вылезает ошибка, которая указывает на функцию session_start а при нажатии на ссылку "Выход" ошибка указывает на session_destroy()!

Вот текст ошибки:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/htdocs/site.ru/php/session3.php:5) in /home/www/htdocs/site.ru/php/session3.php on line 19


Вдобавок после ввода логина и пароля надпись "Привет, имя!" есть но стоит только нажать на ссылку "Обновить страницу", как имя пропадает((( Как я полагаю происходит удаление переменной $_SESSION['name'].

Не подскажите почему? Что в скрипте не так?


<html>
<
head><title>работа с ссессиями</title>
</
head>
<
body>
<
form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name: <input name="name" type="text" value="<?php echo $_POST['name']; ?>">
<
br>Password: <input name="password" type="password" value="<?php echo $_POST['password']; ?>">
<
br><input type="submit" name="submit">
</
form>
</
body>
</
html>

<?php
if($_GET['logout']==1){
session_destroy();
echo "Вы вышли";
}
else{
session_start();
if(!isset($_SESSION['counter'])){$_SESSION['counter']=0; }
if(!isset($_SESSION['name'])){$_SESSION['name']=$_POST['name'];}
if(!isset($_SESSION['password'])){$_SESSION['password']=$_POST['password'];}

if($_POST['name']=="admin" AND $_POST['password']=="12345")
{
$_SESSION['right']="admin"; // задаем права админа, если были введены логин и пароль админа
}
else{$_SESSION['right']="user";}

echo "<br>Hello,".$_SESSION['name']."!";
echo "Ты обновил эту страницу ".$_SESSION['counter']++." раз"; // считаем сколько раз была обновлена страница пользователем
if($_SESSION['right']=="admin"){echo "<br><b>Вы имеете права админа!</b>";}
echo "<br><br><a href=".$_SERVER['PHP_SELF'].">обновить</a>";

echo"<br><br><a href=".$_SERVER['PHP_SELF']."?logout=1>Выйти</a>";
}
?>




Спустя 1 час, 44 минуты, 23 секунды (30.01.2010 - 17:36) Stuff_f написал(а):
ошибку спрячь знаком -> @ в конце кода сделай flash(); поидеи должно работать!!!!!! dry.gif ,
т.е сделай так @session_start();

Спустя 35 минут, 53 секунды (30.01.2010 - 18:12) ak167 написал(а):
Stuff_f, ошибку то я конечно спрячу, но мне интересно из-за чего она вылезает?

Что делает функция flash()? Че-то я не нашел про это в интернете.

Спустя 20 минут, 3 секунды (30.01.2010 - 18:32) Stuff_f написал(а):
ты попробуй а потом по иши, flush () как бы обновление, а почему ошибка вылетает при использовании хз пишет в твоей ошибке то что
Cannot send session cache limiter - headers already sent

типо привышен лимит, и уже отправлены headerы так что ошибка уберется и все будет тип топ

Спустя 1 час, 59 минут, 51 секунда (30.01.2010 - 20:32) ak167 написал(а):
Все! Я уже сам разобрался))) Просто session_start() нужно было ставить в самый верх скрипта, тогда сообщения об ошибке не будут вылетать.

А имя не сохранялось из-за ошибке в алгоритме скрипта. Теперь я его переделал и все работает!

Если кому интересно, вот рабочий вариант:

<?php
session_start();

if(!$_POST['sent'] AND !$_GET['go'])
{
?>

<html>
<
head><title>работа с ссессиями</title>
</
head>
<
body>
<
form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<
input type="hidden" name="sent" value="1">
Имя: <input name="name" type="text" value="<?php echo $_POST['name']; ?>">
<
br>Пароль: <input name="pass" type="password" value="<?php echo $_POST['pass']; ?>">
<
br><input type="submit" name="submit">
</
form>
</
body>
</
html>

<?php
}


If($_POST['sent']==1 OR $_GET['go']==2)
{


$name=$_POST['name'];
if(!isset($_SESSION['counter'])){$_SESSION['counter']=0; }
if(!isset($_SESSION['new'])){$_SESSION['new']=$name;}

if($_POST['name']=="admin" AND $_POST['pass']=="12345")
{
$_SESSION['right']="admin"; // задаем права админа, если были введены логин и пароль админа
}
$right=$_SESSION['right'];

echo "<br>Hello,".$_SESSION['new']."!";
echo "Ты обновил эту страницу ".$_SESSION['counter']++." раз"; // считаем сколько раз была обновлена страница пользователем
if($right=="admin"){echo "<br><b>Вы имеете права админа!</b>";}
echo "<br><br><a href=".$_SERVER['PHP_SELF']."?go=2>обновить</a>";

echo"<br><br><a href=".$_SERVER['PHP_SELF']."?logout=1>Выйти</a>";

}

if($_GET['logout']==1)
{
unset($_SESSION['new']);
unset($_SESSION['right']);
unset($_SESSION['count']);
session_destroy();
echo "Вы вышли";
}
?>
Быстрый ответ:

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