Выход из PHP с аутентификацией формы Apache - PullRequest
0 голосов
/ 16 апреля 2019

Я использую Apache в качестве своего веб-сервера. Это настройка для проверки подлинности формы с

<form method="POST">
  Username: <input type="text" name="httpd_username" value="" />
  Password: <input type="password" name="httpd_password" value="" />
  <input type="submit" name="login" value="Login" />
</form>

Я не могу войти в систему, и $_SERVER['PHP_AUTH_USER'] настроен как ожидалось Бэкэнд для учетных данных - БД MySQL.

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

function logout() {
    // if ($debug) { echo "Logging out...<br />"; }
    echo "Logging out...<br />";
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    $_SESSION = array();
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
        // if ($debug) { echo "Session params: "; print_r($params); echo "<br />"; }
        echo "Session params: "; print_r($params); echo "<br />";
    }
    session_unset();
    session_destroy();
    $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
        || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
    $url = ($is_https ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
    header("Location: {$url}");
}

К сожалению, это просто не работает для меня, и моя сессия все еще очень жива.

Я попытался сбросить ($ _ SERVER ['PHP_AUTH_USER']); но это тоже не имеет значения.

Для справки, print_r(session_get_cookie_params()); дает мне это:

Array ( [filemanager] => Array ( [logged] => testuser ) )
auth_users: Array ( [0] => testuser ) 

Я должен что-то упустить, но что?

[Update]

Пристально глядя на то, что создается на стороне браузера, я вижу, что есть cookie, называемый «сессия», который создается при успешном входе в систему. Если я вручную удалил этот файл cookie, мой сеанс завершится, и мне придется снова войти в систему. Так что это печенье, которое мне нужно удалить. Я пробовал setcookie("session","",time()-3600); и unset($_COOKIE['session']);, но ни один не работает; слишком легко, я думаю ...

Как же я могу удалить эту вещь?

Примечание: при запуске print_r($_COOKIE); оно есть: Array ( [session] => 79Faq7Mn3pEmTflhKWNLE5khuWX3aNF9hT3Q8AApX9VNwFKqnU6m0ii/UXCvQ4rP16DSJb7OJj2cpcrqg0U9AXxVYrsf8/NHJ9jyZGTM9nY1jPA2R3mINJyoTf991qDApoS2/0zWCuw= [fm_cache] => 1 [fileexchanger] => psrfekv0il94e1589ge0lkkoul )

[Обновление 2]

На самом деле я могу удалить сессию имен файлов cookie из своего кода PHP ... Дело в том, что, если я обновлю страницу, cookie вернется с другим идентификатором. Этот cookie-файл сеанса создается вне моей страницы, как если бы я поместил print_r($_COOKIE); в качестве первой строки кода в моем PHP-файле, и я вижу, что cookie-файл 'session' есть.

ЕДИНСТВЕННОЕ объяснение, которое я вижу, это то, что оно исходит от Apache ... Это из моего файла конфигурации сайта

 <Directory "/var/www/html/pathtofolder/">
    DirectoryIndex index.html
    AuthFormProvider dbd
    AuthType form
    AuthName "Restricted Server"
    Session On
    SessionCookieName session path=/
    SessionCryptoPassphrase secret
    AuthDBDUserPWQuery "SELECT password FROM table WHERE username = %s"
    ErrorDocument 401 /login.html
    Require valid-user
</Directory>

Я проверил это, и SessionCookieName session path=/ является тем, кто создает этот "сеансовый" cookie. Если я прокомментирую эту строку, простой session_destroy(); выйдет из меня. С другой стороны, это слишком просто, потому что теперь, каждый раз, когда я нажимаю на ссылку, отправляю форму, перезагружаюсь, WHATEVER, я перенаправляюсь на страницу входа.

Любая помощь будет принята с благодарностью.

...