Как сохранить значение переменной через $_SESSION
Добра всем! Помогите нубу сделать супер красивую авторизацию!
Суть: делаю форму авторизации по SMS без переходов, первый этап получить телефон клиента, обычная форма. Второй этап сверить временный код с введенным на этой же странице. Суть в том что столкнулся с проблемой сохранения переменной после перезагрузки: Вот мой коды:
Первоначальный обработчик (мой роутинг): всегда запускает session_start(); на любой открывающейся странице:
Далее на странице авторизациии идет такой код:
if (isset($_POST['user_tel'])) { $_SESSION['user_tel'] = $_POST['user_tel']; echo $_SESSION['user_tel']; }
Однако после перезагрузки страницы $_SESSION['user_tel'] становится пустым. Прошу указать что я делаю не так. Спасибо!
Спасибо за помощь! Весь код:
Это роутинг, он ищет и запускает функцию Start у конкретных модулей:
public static function Start()
{
session_start();
echo 'Старт сесии';
self::access();
self::get_db();
self::$url = $_SERVER['REQUEST_URI'];
$urlparam = explode('/', self::$url);
$class = $urlparam[1];
$rout = json_decode(file_get_contents(__DIR__ . '/json/route.json'), true);
$pos = [];
$modname = [];
foreach ($rout as $url => $value) {
if ($url === "/" . $class) {
$template = $value['template'];
$temp = file_get_contents(__DIR__ . "/../views/{$template}.html");
foreach ($value['pos'] as $key => $module) {
$mod = "\\module\\" . $module . "::Start";
$pos[] = "{{" . $key . "}}";
$modname[] = call_user_func($mod);
}
break;
}
}
echo str_replace($pos, $modname, $temp);
}
А это непосредственно обработчик формы авторизации:
public static function Start(): string
{
if (isset($_SESSION['id'])) {
//header('Location: /home'); // сделать кнопку выход
}
if ((isset($_POST['user_email']) and isset($_POST['user_password']))) {
if (self::chek($_POST['user_email'], $_POST['user_password'])) {
header('Location: /home');
} else {
$temp = file_get_contents(__DIR__ . "/login.html", true);
$temp.= 'Логин / Пароль не правильный';
return $temp;
}
}
if (isset($_POST['user_tel'])) {
$_SESSION['user_tel'] = $_POST['user_tel'];
echo $_SESSION['user_tel'];
}
$temp = file_get_contents(__DIR__ . "/login.html", true);
return $temp;
}
Ответы (2 шт):
Судя по описанию и отрывку, это точно должно работать
Обычно такие ошибки возникают из-за:
- браузер блокирует или удаляет кукисы, проверьте настройки
- строка
session_start();должна быть в каждом файле, где вы используете$_SESSION. Также следует её размещать в самом начале файла - сессия где-то разрушается
- проверьте путь сохранения сессии
Ещё пришёл вариант в голову:
- проверьте, вдруг у при перезагрузке отправляется пустая форма, из-за чего переменная становится пустой (исправляется
!empty($_POST['user_tel'])
Ошибка заключалась лишь в том, что я выводил значение сессии внутри:
if (isset($_POST['user_tel'])) {
$_SESSION['user_tel'] = $_POST['user_tel'];
echo $_SESSION['user_tel'];
}
Правильно сделать вот так:
if (isset($_POST['user_tel'])) {
$_SESSION['user_tel'] = $_POST['user_tel'];
}
echo $_SESSION['user_tel'];
Простите меня за беспокойство! благодарю Vladislav Tikhomirov