Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

Возможно ли удалить переменную супер глобального массива?

Например, $_SERVER["PHP_AUTH_USER"]
Пробовал функцию unset, но не помогло.

в начале админки есть код
if (!isset($_SERVER['PHP_AUTH_USER'])){ header ("WWW-Authenticate: Basic realm=\"Admin Page\""); header ("HTTP/1.0 401 Unauthorized"); exit(); }
то есть чтобы переавторизоватся мне где то из другого места кода нужно удалить элемент $_SERVER['PHP_AUTH_USER']


Ответ

Это интересный вопрос, и он оказывается немного сложнее, если прочитать не один только заголовок, но и сам текст вопроса.
Для ответа на него требуется понимание того, как в принципе работает РНР
поэтому ответа будет два:
Удалить элемент из суперглобального массив, разумеется, можно. Но это вам не поможет.
Поскольку эти переменные заполняются заново с каждым запросом, из приходящих НТТР заголовков. То есть, на самом деле вопрос звучит, как
Можно ли заставить браузер не передавать определенный НТТР заголовок?
Ответ: нельзя.
HTTP basic authentication так устроена, что браузер передает логин и пароль с каждым запросом. Если он не будет их передавать, то РНР скрипт о них не узнает, и пользователь не сможет просмотреть запароленную страницу.
При этом механизма логаута в HTTP basic authentication не предусмотрено.
Можно только запросить пароль повторно, но если пользователь проигнорирует этот запрос, то браузер продолжит присылать старые логин и пароль. Лет 15 назад я довольно долго копал эту тему ,и даже сделал демо-страничку, которая разлогинивала-таки пользователя... но самые способные могли обнаружить, что этот трюк исполнялся с помощью банальной куки 8)

Комментариев нет:

Отправить комментарий