1

ステートレスであるため、http からログアウトする「本当の解決策」がないことを理解しています。ただし、必要なのは回避策だけです。私が達成しようとしているのは、ログアウト リンクをクリックすると logout.php ファイルにリダイレクトされることです。そのファイルは、基本認証ヘッダーを再度呼び出します。PHPコードに偽のパスワードを渡させてから、ユーザーが「ログアウト」されるホームページにリダイレクトしたいと考えています。

実際にはログアウトされないことはわかっていますが、ブラウザは渡された最新の認証資格情報を使用しようとするため、ユーザーは有効なもので再ログインすることになります。

私は基本的にphpの経験がなく、偽のパスワードの受け渡しをコーディングする方法を理解できません。

どんな助けでも大歓迎です。

logout.php

<?php
    session_start();
    session_write_close();

    header('HTTP/1.1 401 Access Denied');
    header('WWW-Authenticate: Basic realm="HTTPS File Upload"');
    header('HTTP/1.0 401 Unauthorized');
    header('Location: http://www.homepage.com') 
?>
4

4 に答える 4

1

このページの例 #3 は、探しているものに近いかもしれません。

http://php.net/manual/en/features.http-auth.php

別の方法として、代わりに PHP セッションを実装することもできます。これについては、基本的な読み方をお読みください。

http://phpmaster.com/php-sessions/

編集-PHPセッションを追加する場合、無効な資格情報を強制する必要はありません(はい、両方を持つことができます)。あなたが持っている唯一のセッション変数がブール値の $_SESSION["IsLoggedIn"] であっても。上記の変数を使用して、以下のように例 3 の if ステートメントに追加し、logout.php スクリプトを介してセッションから削除できます。

if (!isset($_SESSION["IsLoggedIn"]) || !isset($_SERVER['PHP_AUTH_USER']) ||
    ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    authenticate();
} else {
    ...
}

session_start(); を使用することを忘れないでください。$_SESSION 変数を使用するときは常に、ページの上部に表示されます。

于 2013-08-06T16:58:19.880 に答える
1

それは動作します:

<?php
if (!isset($_SERVER['PHP_AUTH_USER']) or isset($_POST['logout'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo '<h1>Access Denied!</h1>';
    exit;
} else {
    if(!($_SERVER['PHP_AUTH_USER']=='admin' and md5($_SERVER['PHP_AUTH_PW'])=='d81edf2e48ddddddddd631e374c5932d'))
    {
        header('HTTP/1.0 401 Unauthorized');
        exit;
    }
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>


<html>
<head>
</head>
<body>
<form method="POST">
<button name="logout" type="submit">Log Out</button>
</form>

</body>
</html>
于 2016-02-21T10:28:41.280 に答える
0

http 応答コードを次のように設定します。

401

応答ヘッダーには次を含める必要があります。

WWW-Authenticate : Basic

ユーザーは、更新時にログインするように求められるようになりました。

PS Chromium ブラウザーは、ユーザーに 401 コードからのログインを求めるプロンプトを表示するので、IE でテストします。また、プライベートブラウジングモードはあなたの友達です。

于 2016-04-23T07:25:34.383 に答える