Примечание: неопределенный индекс: переменные сеанса можно игнорировать? - PullRequest
0 голосов
/ 10 февраля 2020

Backstory

Раньше я размещал свой сайт на выделенном сервере GoDaddy. Обычно я (при успешном входе пользователя в систему) применяю что-то к переменной _SESSION, чтобы определить, что пользователь успешно вошел в систему, например

if ($_SESSION['user_logged_in'] == true) {
    // did stuff here
}

. Обычно я применяю что-то подобное в верхней части страницы, чтобы если пользователь не вошел в систему, он перенаправит их куда-то еще, например ...

<?php
if ($_SESSION['user_logged_in'] != true) {
    // direct them to log in
    header("Location: http://www.example.com/login");
    die();
} else {
    // user is logged in so show them stuff
}
?>

Я перехожу из GoDaddy в AWS и создаю свой собственный экземпляр EC2 с Apache и т. д. , Теперь, когда я обращаюсь к страницам, когда пользователь не вошел в систему, я получаю сообщения об ошибках типа

Notice: Undefined index: user_logged_in in /var/www/html/index.php on line X

Я понимаю, почему я получаю это сообщение, поскольку технически, поскольку пользователь не вошел в систему, а переменная сеанса не имеет был создан.

но ....

Мой первый вопрос: есть ли в apache параметр, который игнорирует, установлена ​​ли переменная сеанса, чтобы не отображать ошибку? Я никогда не получал это сообщение, когда был с GoDaddy, поэтому я предполагаю, что так.

Во-вторых, каковы риски безопасности, связанные с неиспользованием чего-то вроде if (isset($_SESSION['variable']) для определения, существует ли переменная сеанса или нет?

Не будет ли использование чего-то вроде if ($_SESSION['user_logged_in'] != true) { тем же самым?

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать error_reporting для отключения Notice ошибок уровня:

error_reporting(error_reporting() & ~E_NOTICE);

, но в долгосрочной перспективе лучше исправить код, используя что-то вроде Null Coalescing оператор ?? например

if (($_SESSION['user_logged_in'] ?? false) != true) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...