Я создал скрипт php, который проверяет, зарегистрирован ли администратор, используя сеанс PHP. Если они не вошли в систему, сценарий отправляет их на последнюю страницу, на которой они были включены, с сообщением об ошибке.
$Message = urlencode(" Authentication Timeout: 1");
header("Location: {$_SERVER['HTTP_REFERER']}?Message=".$Message);
И на странице main.php у меня есть этот код для проверки $ Message:
<?php
if(!empty($_REQUEST['Message'])){
echo "<font color='red'>".$_REQUEST['Message']."</font>";}
?>
Однако, если это событие запущено, браузер показывает ?Message=TEXT
даже после его возврата. И текст, который отображается, так же как и в URL-адресе, не исчезает, пока вы не обновите страницу. Еще одна вещь, которую я заметил, заключается в том, что если вы просто добавили сообщение Message = SomeText в конец URL-адреса, тогда код сообщения запускается для этой страницы, что ожидается, потому что PHP-код ищет сообщение "Message".
Каким будет наилучший подход для удаления текста из URL-адреса, но все же может отображать сообщение об ошибке?
Использовать сеансы
на защищенной странице:
$_SESSION['response'] = 'authentification failed'; // set message in a session
header('Location: '.$home); // Redirect to homepage
die; // stop executing the script
на странице по умолчанию:
if(isset($_SESSION['response'])){ // check if session set
echo $_SESSION['response']; // output Content of session
unset($_SESSION['response']); // delete session
}
Читайте о флэш-сообщениях. Как правило, это подход для хранения сеанса сообщения, и если этот сеанс существует во время загрузки страницы, вы показываете его пользователю и удаляете этот сеанс. Поэтому даже после перезагрузки сообщение больше не будет.
Перед перенаправлением:
$_SESSION['flash'] = 'text';
После перенаправления:
echo $_SESSION['flash'];
unset($_SESSION['flash']);
Конечно, вы должны сделать некоторую проверку.
cookies
или другое хранилище