[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка при завершении сессии
Bandicoot
Привет всем. Есть скрипт панели управления, нужно сделать так чтобы при нажатии кнопки "Выход" пользователя перекидывало на страницу авторизации. Вот код:

Панель управления:
<?php

session_start();

if(!isset($_SESSION['username']))
{
header('Location: authorization.php');
exit;
}

// Выводим приветствие
echo "Добро пожаловать, ".$_SESSION['username'];

// Загружаем данные о пользователе в ассоциативный массив $userinfo
$user_file_info = $_SESSION['username']."_info.inc";

$userdata = file($user_file_info, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$userinfo = array();

foreach($userdata as $userstring)
{
list($f, $v) = explode ('|', $userstring);
$userinfo[$f] = $v;
}
unset($userdata);

// Загружаем данные о добавленных пользователях в ассоциативный массив $refuserinfo
$refusers_file_info = $_SESSION['username']."_refusers.inc";

$refusersdata = file($refusers_file_info, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// Создаем функцию, которая будет обнулять сессию, если пользователь нажал "Выход"
function killSess(){
// Обнуляем сессию
$_SESSION['username'] = NULL;
// Рефреш
header('Location: '.$_SERVER['PHP_SELF']);
exit;
}

// Если пользователь нажал на Выход уничтожаем сессию
if($_GET['act'] == 'exit')
{
killSess();
}

// Если пользователь вошел в систему, выводим панель управления
echo "<center><h3>Панель управления</h3></center>";
echo "<center><table width='780' border='0' bgcolor='#f3f3f3' align='center'>";
echo "<tr><td>Логин</td><td>Тариф</td><td>Статус</td><t d>Дата</td><td rowspan='2'>Ваш тариф: ".$userinfo[tarif]."<br />
<a href='?act=exit'><input type='button' value='Выход' name='logout' /></a></td></tr>"
;
echo "<tr><td>".$userinfo[login]."</td><td>".$userinfo[tarif]."</td><td>".$userinfo[status]."</td><td>".$userinfo[regdate]."</td></tr>";
echo "</table><br />";

echo "Ваша ссылка: ".$link."<br/>";

echo "<center><h3>Привлеченные пользователи</h3></center>";
echo "<center><table width='780' border='0' bgcolor='#f3f3f3' align='center'>";
echo "<tr><td>Пользователи</td><td>Статус</td><td>Добавлен</t d></tr>";
if($refusersdata != 0) {
foreach($refusersdata as $refusers)
{
echo $refusers;
}
}
else {
echo "<tr><td>У вас пока нет привлеченных пользователей</td></tr>";
}


echo "</table><br />";

echo "<a href='add_user_form.htm'><input type='button' value='Добавить пользователя' name='adduserbutton'/></a> <a href='#'><input type='button' value='Обратная связь' name='feedback'/></center><br/>";

?>


Страница авторизации:
<?php

session_start();

// Загружаем данные о пользователях в ассоциативный массив $users
$data = file('users.inc', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$users = array();

foreach($data as $line)
{
list($u, $p) = explode ('|', $line);
$users[$u] = $p;
}
unset($data);

// Если сессия зарегистрированна, то объявляем ее в переменную
$sLogin = $_SESSION['username'];

// Если поля логин и пароль заполнены и нажата кнопка "Вход"
if(!empty($_POST['username']) && !empty($_POST['password']) && ($_POST['summa'] == $_POST['resultat']))
{
// Объявляем переменные
$username = $_POST['username']; // логин
$password = $_POST['password']; // пароль
$password = md5($password);
// Проверяем есть ли в массиве пользователь с ключом login и сравниваем пароли
if(isset($users[$username]) && $users[$username] == $password){
// Если условия выполнены, регистрируем сессию со значением логина
$_SESSION['username'] = $username;
// Рефрешемся
header('Location: '.$_SERVER['PHP_SELF']);
exit;
} else {
// Если пользователь в массиве отсутствует или пароли не совпадают, выводим соответствующее сообщение
echo 'Введены неверные данные';
}
}


// Если все-таки сессия зарегистрированна и переменная благополучно объявлена
if(isset($sLogin)){
// На всякий случай сверяемся с текущими показателями массива.
// На случай если пользователя удалили, а сессия у него все еще висит.

if(!isset($users[$sLogin]) || empty($users[$sLogin])) killSess();

// Если все в порядке - перенаправлем на панель управления
header('Location: panel.php');
exit;

} else { // Если пользователь не ввел данные - выводим форму ввода

// Создаем простой скрипт для генерации случайных чисел (защита от ботов)

$r1 = mt_rand('1', '5');
$r2 = mt_rand('1', '4');
$resultat = $r1 + $r2;
echo '<form action="" method="post">';
echo '<table border="0">';
echo '<tr>';
echo '<td>Введите Ваше имя:</td>';
echo '<td><input type="text" size="10" maxlength="20" name="username"></td>';
echo '</tr>';
echo '<tr>';
echo '<td>Введите пароль:</td>';
echo '<td><input type="password" size="10" maxlength="16" name="password" ></td>';
echo '</tr>';
echo '<tr>';
echo "<td>Сколько будет ".$r1."+".$r2." = ?</td>";
echo '<td><input type="text" size="10" maxlength="10" name="summa"></td>';
echo '</tr>';
echo '<tr>';
echo '<input name="resultat" type="hidden" value="'.$resultat.'">';
echo '<td><input type="submit" value="Вход"></td>';
echo '<td><a href="regform.php"><input type="button" value="Регистрация" /></a></td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
?>

При нажатии кнопки "Выход" на панели управления выходит следующая ошибка:
Добро пожаловать, oleg
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\panel\panel.php:12) in Z:\home\localhost\www\panel\panel.php on line 37

При обновлении страницы в браузере появлется страница авторизации. Как сделать так, чтобы перенаправление происходило сразу и без ошибок?



Спустя 8 минут, 4 секунды (8.02.2011 - 14:59) Snus написал(а):
Bandicoot
Мой код :) замени
header('Location: xxxx');
на
 echo '<script type="text/javascript">window.location.href=("xxxx");</script>';

Спустя 17 секунд (8.02.2011 - 14:59) Lenarfate написал(а):
Цитата
Cannot modify header information - headers already sent by

вбей ошибку в гугл

Спустя 55 секунд (8.02.2011 - 15:00) waldicom написал(а):
Вот это:

Цитата
// Выводим приветствие
echo "Добро пожаловать, ".$_SESSION['username'];

выводить непосредственно перед этим:
Цитата
// Если пользователь вошел в систему, выводим панель управления

Только конечно проверять, установлена ли сессия.
Можно оставить и на том же месте, где сейчас, только опять же, нужна проверка.

Спустя 7 минут, 56 секунд (8.02.2011 - 15:08) Snus написал(а):

Спустя 30 секунд (8.02.2011 - 15:08) alex12060 написал(а):
Либо меняй структуру, либо сделай ява скриптом, как Снус предложил)

Спустя 28 минут, 58 секунд (8.02.2011 - 15:37) Bandicoot написал(а):
Цитата (waldicom @ 8.02.2011 - 12:00)
Вот это:

Цитата
// Выводим приветствие
echo "Добро пожаловать, ".$_SESSION['username'];

выводить непосредственно перед этим:
Цитата
// Если пользователь вошел в систему, выводим панель управления

Только конечно проверять, установлена ли сессия.
Можно оставить и на том же месте, где сейчас, только опять же, нужна проверка.

О, ништяк, помогло! Спасибо дружище!


_____________
Работаю с Уии
Быстрый ответ:

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