#php #forms #redirect
Вопрос:
У меня есть index.php это проверяет, вошел ли пользователь в систему, если нет, перенаправляет пользователя на страницу входа следующим образом:
<?php
session_start();
$_SESSION["page_identifier"] = "index";
include "inc/header.php";
if(!isset($_SESSION["loggedin"]) OR !$_SESSION["loggedin"] == TRUE){
echo "ERROR: Not logged in!";
header("Refresh: 3; url = login.php");
}
else{
......
}
?>
Это страница входа в систему.
<?php
$_SESSION["page_identifier"] = "login";
$_SESSION["form_identifier"] = "login";
include "inc/header.php";
?>
<div>
<form action="submission.php" name="login" method="POST">
<input class="textBox" type="text" name="username" placeholder="Enter your username" maxlength="20"/>
<input class="textBox" type="password" name="password" placeholder="Enter your password" maxlength="20"/><br><br>
<input class="button" type="submit" value="Submit"/>
</form>
<form class="register" action="register.php">
<input class="button" type="submit" value="New user? Register"/>
</form>
</div>
<?php include "inc/footer.php"; ?>
Каждая страница задает $_SESSION["form_identifier"]
свое имя страницы, при отправке формы я проверяю файл отправки, из которого она была получена, следующим образом:
<?php
session_start();
$_SESSION["page_identifier"] = "submission";
//checking if the form is a login form.
if($_SESSION["form_identifier"] == "login"){
.......
}
Это показывает, что от исходит от «NULL», а не от «входа в систему». Почему это происходит и есть ли способ это изменить?
Комментарии:
1. Похоже, вы забыли указать
session_start();
вверху страницы входа в систему2. P. s. просто совет, добавление идентификаторов страниц в сеанс приведет к неожиданному поведению и, возможно, ошибкам, если пользователи откроют ваш сайт более чем на одной вкладке своего браузера, а затем продолжат переключаться между ними — что является довольно распространенным поведением. Эти вкладки будут использовать один и тот же сеанс, поэтому легко увидеть, что на сервере может возникнуть путаница в том, с какой страницы «пришел» запрос на самом деле. Использование браузера не обязательно является линейным процессом.
3. Ну, точные детали немного зависят от обстоятельств. Есть ли на вашем сайте какие-либо общедоступные страницы или все они являются частными, за исключением страницы входа в систему? И каковы сценарии, в которых вам действительно нужно знать страницу/URL, с которой вы пришли (в отличие от страницы/URL, которая сейчас обрабатывается)? По моему опыту в подобных вещах необходимо знать URL-адрес страницы входа в систему, чтобы при загрузке страницы входа в систему код не гласил «пользователь не вошел в систему, перенаправьте на страницу входа в систему» и, таким образом, создайте бесконечный цикл…
4. …единственный другой раз, когда вам нужно знать, на какой странице вы сейчас находитесь, — это если некоторые страницы являются частными, а некоторые общедоступными, чтобы вы снова могли решить, нужно ли перенаправлять пользователя, если он не вошел в систему или нет. Это может быть достигнуто за счет наличия списка (в файле или базе данных) страниц, на которые требуется войти пользователю, и их URL-адресов. Это или вы помещаете код на каждую из тех страниц, которые проверяются, но тогда вы обычно получаете избыточный код — лучше его централизовать.
5. Да, это действительно правильный подход к этому.
Ответ №1:
На этот вопрос ответил АДисон в комментариях, я забыл поставить «session_start();» на странице входа в систему.