Я думаю, ваша проблема является FUBAR новой строки :) Добавили ссылку Войти страницу, которая незаходимого сеансовые переменные, которые проверяют на логины, если не в состоянии.
Будьте очень осторожны с тем, где вы положили свои <?php ?>
тегов - и в .inc файлов, такие как db.php включают в себя - вы можете оставить из закрытия ?>
метки на последнюю строку, чтобы избежать случайного ENTER, а затем CTRL + S сбои, крадущиеся в нежелательный символ новой строки в вашем буфере вывода (ob). Если ob_start активирован, ничто не записывается с сервера, прежде чем вы выбираете или заканчиваете скрипт. ELSE, если его нет, по умолчанию это то, что каждый \ n будет вывести вывод и запустить часть содержимого полезной нагрузки.
login.php:
<?php
session_start(); // put this on top-most line in your script
$ok = check($_POST['user'], $_POST['pass']);
if($ok) {
$user = db_get_user_creds($_POST['user']);
$_SESSION['name'] = $user['name'];
$_SESSION['job_title'] = $user['job_title'];
} else {
// session_unset();
unset($_SESSION['name']);
unset($_SESSION['job_title']);
}
?>
admin.php
<?php
session_start(); // put this on top-most line in your script
// or, use ob_start at the very first line
// (with no widespace what so ever written out before it)
include('db.php');
?> I am writing out a newline here, session/header section is going to become unstable
<?php
// Inialize session
// @session_start(); moved up top
ob_start();
// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['name']) || ($_SESSION['job_title'] != "admin")) {
header('Location: index.php');
}
ob_flush();
?>
Смотрите 'Я пишу из новой строки здесь' бит
Чуть глубже rabbithole идет; поток связи выглядит следующим образом:
1) HEADERS such as
Connection: keep-alive\r\n
Content-Type: text/html\r\n (etc)
2) DOUBLE NEWLINE (one newline with no previous chars on that line)
\r\n
3) CONTENTS
Body
Of Page
У администратора есть имя? :) – mschr
Если вы удаляете '@' перед '@session_start();' сообщается ли какая-либо ошибка? – Leri
@mschr да, но они много: D –