0

Сервер ругается Cannot modify header information - headers already sent by. Создаю файл с сессиями. Сохраняю в UTF-8 без BOM, сессии пишу вначале. А он всё равно ругается. Подскажите что делать

Пример:http://itmemo.ru/2012/02/realizatsiya-avtorizatsii-na-sayte-s-pomoshhyu-php-i-sessiy/


index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Вход в систему</title>
</head>
<body>
<form action="login.php" method="post">
<table align=center>
<tr>
<td>Логин:</td>
<td><input type="text" name="login" /></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" class="buttons" value="Войти" /></td>
</tr>
</table>
</form>
</body>
</html>

Login.php

<?
//Запуск сессий;
session_start();

if (isset($_POST['login']) && isset($_POST['password']))
{
// получаем данные из формы с авторизацией
$login = mysql_real_escape_string($_POST['login']);
$password = $_POST['password'];
//проверка пароля и логина
if (($login=='a123')&& ($password=='123')){
echo ("логин совпадает и пароль верны");
$_SESSION['Name']=$login;
// идем на страницу для авторизованного пользователя
header("Location: sekret.php"); //-----------------<-  Его это не устраивает
}
else
{die('Такой логин с паролем не найдены в базе данных.');
}
}
?>
 - -------
 Sekret.php

<?
//Запуск сессий;
session_start();
//если пользователь не авторизован

if (!(isset($_SESSION['Name'])))
{
//идем на страницу авторизации
header("Location: index.php");
exit;
};
//Выводим саму страницу для авторизованных пользователей
$nm =$_SESSION['Name'] ;
echo ("<div style=\"text-align: center; margin-top: 10px;\">");
print "Пользователь системы $nm <br> ";
print "Вы на секретной странице $nm <br> ";
?>
Alex
  • 6,488
Rakzin Roman
  • 5,720

2 Answers2

1

В ошибке написано, что заголовки уже отправлены, а вы их пытаетесь изменить. Не надо так.

UDP: За такие уроки нужно бить учителя

echo ("логин совпадает и пароль верны");
$_SESSION['Name']=$login;
// идем на страницу для авторизованного пользователя
header("Location: /author/sekret.php");

Тут сначала текст был отправлен на вывод, а затем автор решил, что нужно с помощью заголовка отправить редирект.

VasyOk
  • 2,771
  • 1
    Добавил комментарий к стратье http://itmemo.ru/2012/02/realizatsiya-avtorizatsii-na-sayte-s-pomoshhyu-php-i-sessiy/#comment-2918 – VasyOk Aug 31 '14 at 14:53
  • А я тут голову ломаю. Огромное спасибо. – Rakzin Roman Aug 31 '14 at 14:59
0

session_start() поставь в самом начале страницы, прямо перед <!DOCTYPE html

  • Зачем? Какой смысл несет session_start() в статической странице? – VasyOk Aug 31 '14 at 14:46
  • session_start() открывает сессию и предоставляет доступ в переменным в сессии. Без этого не получится. – Автостопом_до_Рая Aug 31 '14 at 14:54
  • Я вкурсе, что делает session_start, я не понимаю, зачем они нужны в html. – VasyOk Aug 31 '14 at 14:56
  • Ну не все же могут правильно реализовать MVC. Возможно, даже и не знают, что это такое. Сам через такое проходил, когда слушал курс Куртеева (если не ошибаюсь). А знаешь почему? Потому что он взял и сделал курс по php, html, mysql, пусть кривой и неправильный, но он сделал, и сделал его доступным. А вот "не буду показывать пальцем кто" не сделал. Использует чужие идеи и в тоже время ругает тех, кто пишет неправильно. – Автостопом_до_Рая Aug 31 '14 at 15:14