Я использую 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, я перенаправляюсь на страницу входа.
Любая помощь будет принята с благодарностью.