@tryvols
Front-End разработчик

Почему переменная сессии удаляется?

Controller Admin, action panal:
if(!isset($_SESSION['admin'])) // Тут ее уже не существует. Программа зацикливается.
		{
			session_start();
			header("Location: /admin/authorization/");
			exit;
		}

		if (isset($_POST["exit"]))
		{
			session_unset();
			session_destroy();
			header("Location: /admin/authorization/");
			exit;
		}


Model Admin, action authorization:
public function authorization()
	{
		if (isset($_POST['login'])) {
			if ($this->login == $_POST['login'] && $this->password == md5($_POST['password']))
			{
				$_SESSION['admin'] = 'some';
				header("Location: /admin/panel/");
				exit;
			}
			else {
				header("Location: /admin/authorization/");
				exit;
			}
		}
	}


При правильно введенном логине и пароле, идет переадресация на Controller Admin, action panal, где переменной сессии уже нет. Почему?
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
The read callback will retrieve any existing session data (stored in a special serialized format) and will be unserialized and used to automatically populate the $_SESSION superglobal when the read callback returns the saved session data back to PHP session handling.
php.net/manual/en/function.session-start.php

Другими словами, вы пытаетесь использовать данные сессии до того, как её инициализируете.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SergeyZelensky-Rostov
session_start должен быть вызван до $_SESSION

session_start();
if(!isset($_SESSION['admin'])) // Тут ее уже не существует. Программа зацикливается.
    {
      header("Location: /admin/authorization/");
      exit;
    }

    if (isset($_POST["exit"]))
    {
      session_unset();
      session_destroy();
      header("Location: /admin/authorization/");
      exit;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы