Помогите внести ясность в простом вопросе, изучаю php, не могу понять одну простую вещь с переходом по адресу в теге action.
Делаю так, в файле auth.php
проверяю пустой инпут или нет, если нет старную сессию и добавляю в гл.массив auth =true
//auth.php
if (!empty($_REQUEST['test'])) {
session_start();
$_SESSION['auth'] = true;
} else {
echo 'Пустой инпут';
?>
<form action="" method="get">
<input name="test">
<input type="submit" value="SEND">
</form>
<?php
}
Захожу во второй файл index.php
и проверяю, выводится true, сессия работает на этом этапе все понятно.
//index.php
session_start(); //стартуем сессию
if (!empty($_SESSION['auth'])) { echo 'true'} else { echo 'false'; }
Но если я в файле auth.php
в теге action прописываю action="index.php"
, то при перенаправлении на index.php получаю false.
Я так понимаю это связано с тем, что в первом случае файл auth.php
считывается два раза и в итоге стартует сессию и В $_SESSION['auth']
пишет true
, а втором случае повторное считывание не происходит и идет перенаправление сразу в index.php
, где по сути $_SESSION['auth']
вовсе нет.
Как быть в такой ситуации не могу понять
Происходит все корректно, в первом случае:
auth.php
, заполняете поле, жмете кнопку отправкиaction
браузер отправляет запрос к текущему скрипту, то есть опять auth.php
, условие выполняется, в сессию записывается нужное значение.index.php
, нужное значение уже в сессииво втором случае вы исправляете action
на index.php
поэтому при отправке формы запрос уходит именно туда. Никакие параметры формы уже не проверяются, в сессию ничего не записывается, т.к. скрипт обработки формы стал другим.
Если вам необходимо после проверки данных формы переправить пользователя на другой скрипт, то обработчик формы следует оставить пустым (или явно auth.php
), а после указания значений сессии программно перенаправить запрос на другой файл
....
$_SESSION['auth'] = true;
header("Location: index.php");
exit();
При этом будет сформирован HTTP ответ с кодом 302, сервер отправит браузеру новый URL, по которому браузер автоматически и перейдет.
Перед вызовом header
не должно быть никакого другого вывода данных, либо придется очистить буфер вывода с помощью ob_clean
У вас есть три файла (некоторые файлы могут быть объединены в один)
А дальше все просто
session_start()
В файле обработчики формы (тот который указан в атрибуте action
) должна осуществляться проверка полей формы и устанавливаться или сбрасываться флаг аутентификации
if (password_valid())
$_SESSION['auth'] = true;
else
unset($_SESSION['auth']);
При необходимости проверить аутентификацию в любом месте программы, должен выполняться код
if (isset($_SESSION['auth']))
empty — Проверяет, пуста ли переменная. Если вы не создавали $_SESSION['auth'] то будет ошибка. Проверяйте существование isset($_SESSION['auth'])
файл index.php
session_start();
// если есть сесия
if(isset($_SESSION['auth'])){
echo 'true';
}
// иначе - подключаем форму
else{
include 'auth.php';
}
файл auth.php
// Если есть переданный из формы пароль
if (isset($_POST['password'])) {
$_SESSION['auth'] = true;
} else {
// иначе выводим форму
echo 'Пустой инпут';
// не передавайте пароли в адресной строке. это плохая практика.
// Также првоеряйте имена передаваемых и получаемых переменных. Если передаём пароль то и получать должны пароль.
// Вы же передавали поле с именем test, а пытались получить $_REQUEST['password']
?>
<form action="" method="post">
<input name="password">
<input type="submit" value="SEND">
</form>
<?php
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите пожалуйста, как можно обмениваться данными и вообще работать с вебсокетам через проксиЯ понимаю что прокси https не подойдут нужен...