Проблемы, с которыми вы столкнулись, в основном можно решить, расположив код вокруг скрипта обработчика по умолчанию. (см. мои рекомендации ниже.)
Существует два основных способа передачи информации в такой сценарий (как я сказал в комментарии выше). Основной способ - через переменную GET, например http://www.example.com/main.php?p=1
.
Если вы хотите иметь более удобные для посетителей URL-адреса, вы можете использовать RewriteRule
в файле .htaccess
для преобразования хороших URL-адресов в URL-адреса, понятные вашему обработчику. (Вам понадобится mod_rewrite .)
Это может быть излишним для данного конкретного вопроса, но вот несколько рекомендаций для безопасных веб-приложений. Я думаю, что они все актуальны:
- Разместите вашу конфиденциальную информацию за пределами общедоступного веб-корня .
- По умолчанию не отображать информацию . Включайте отображение информации только в том случае, если пользователь имеет положительные полномочия.
- В идеале это включает URL-адреса (если они вводят действительный URL-адрес, но не авторизованы, не сообщайте им, что они достигли действительного URL-адреса). Один из способов - перенаправить (установить заголовок местоположения, как вы делали) на страницу входа, если они не авторизованы.
- Создание сценария обработчика по умолчанию. Этот центральный сценарий будет включать все необходимые файлы и вызывать все необходимые функции. Передайте всю информацию запроса этому обработчику, и он выведет весь HTML.
- Требование к # 3: Инкапсулировать ваш код в функции и классы. Таким образом, ваш обработчик по умолчанию может вызывать их, когда он будет готов, только если они вам нужны, а не просто потому, что они оказались включены. Это позволяет вам гораздо больше контролировать поток вашего приложения.
- Вместо
echo
HTML-кода в произвольных местах по всему коду, возвращает весь вывод HTML в ваш основной обработчик , который соберет его и выведет все в одном месте, когда будет готов. Случайные echo
s разбросаны по сторонам, чтобы дыркам в безопасности было легче появляться.
- Не доверяйте вводу пользователя . Если вы собираетесь использовать значение, полученное из
$_GET
или $_POST
, убедитесь, что SURE - это допустимое значение, прежде чем использовать его.
Edit:
(Это более конкретно и направлено на ваш код, как он есть сейчас)
Есть 3 причины, по которым ваш код не будет работать так, как вы ожидаете:
Вы пропустили закрывающую скобку в первой строке if(!isset($_SESSION['page'])
.
Способ написания вашего кода, если $_SESSION['page']
уже установлен, когда пользователь заходит на страницу, они будут перенаправлены на страницу входа. Вы можете исправить это, поместив header('Location:login.php');
exit;
в предложение if
и полностью удалив предложение else
:
if(!isset($_SESSION['page'])) {
header('Location:login.php');
exit;
}
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];
Вам нужно установить $_SESSION['page']
при первом входе в систему, чтобы они могли просматривать первую страницу.
Я бы рекомендовал использовать целое число для $_SESSION['page']
вместо имени скрипта. Таким образом, вы можете установить $_SESSION['page']
в 1, когда они входят в систему, и каждый раз, когда они успешно просматривают страницу, увеличивают $_SESSION['page']
на единицу. Считайте, что $_SESSION['page']
означает следующую статью, которую этот пользователь может просматривать .
Вы можете установить $pageid
на каждой бумаге. Каждый раз, когда они пытаются просмотреть страницу, если $_SESSION['page']
меньше $pageid
, не позволяйте им просматривать страницу.