2

В чём ошибка в следующем коде?

header("Content-Type: text/html; charset=utf-8");
session_start();
include('templates/PHP/header.html');
if($_GET['action'] == 'logout') 
{
    unset($_SESSION['login']);
    header('Location: http://$_SERVER[HTTP_HOST]');
}
if(!empty($_SESSION['login'])) include('profile.php');
else include('templates/PHP/auth.html');
include('templates/PHP/footer.html');

Warning: Cannot modify header information - headers already sent by (output started at W:\domains\testTask\templates\PHP\header.html:19) in W:\domains\testTask\index.php on line 8

0xdb
  • 51,614

1 Answers1

3

Нельзя использовать header() в теле документа, вы пытаетесь создать в 1-м фаиле 2 обработчика совершенно разных событий , разделите их на logout/login.php.

а в теле документа выполните проверку на присутствие $_SESSION['login'] и отдайте нужный контент пользователю.

Обязательно проверьте подлинность сессии .

  • функцию header() можно объявить только 1 раз, и перед ней не должно быть html кода – Aʀtʋʀ Cʀɘțʋ Sep 20 '17 at 22:18
  • почитав об этом всем, я понял, что заголовки идут перед телом, но не могу понять как так то) если получается что html кодом я перенаправляю на ?action=logout, а после уже делаю перенаправление, средствами js я понимаю, что могу тоже перенаправить, просто интересно, как на сайтах реализуют это все средствами php – Антон Бурак Sep 20 '17 at 22:22
  • Все проверки для перенаправлений осуществляются ещё перед подключением тело. А грубые методы рода js используются в редких случаях. Например если надо пользователя выкинуть с аккаунта, например когда у него чат обновляется. – Aʀtʋʀ Cʀɘțʋ Sep 20 '17 at 22:25
  • @Антон Бурак Пример страницы logout: session_start(); setcookie("auth", '', time()-60602436510); session_destroy(); header('Location: index.php'); – Aʀtʋʀ Cʀɘțʋ Sep 20 '17 at 22:29
  • а ссылку выйти делайте обчной ссылкой которая направляет на lougout.php – Aʀtʋʀ Cʀɘțʋ Sep 20 '17 at 22:30
  • я думал, что делать отдельный php скрипт для логаута бредово, что так не делают – Антон Бурак Sep 20 '17 at 22:32
  • ну я понял все, спасибо, использую один из вариантов – Антон Бурак Sep 20 '17 at 22:32
  • Вы можете и в 1-ом файле сделать, это не проблема, но эти условия должны быть перед началом тэга. просто в таком случее вам придется опять повторить проверку что бы отдать контент гостя или пользователя – Aʀtʋʀ Cʀɘțʋ Sep 20 '17 at 22:38