1

ユーザーがログインしていないときにシステムで機能を実行しようとすると、ログインしていないため実行できないというメッセージがポップアップ表示されるようなものを作成しようとしています。 [OK] を押したときのログイン画面。

また、ユーザーが URL を直接入力するとログイン画面にリダイレクトされるようにしたいのですが、今回はエラー メッセージは表示されません。

私は持っている:

$components = explode('/', $url, 3) ;

if(!isset($_SESSION['loggedin']) && $components[0] != 'access' && $components[0] != 'login')
    {

        echo json_encode('{"error": 2000, "msg": "You must be logged in to do that."}') ;
        return false ;
}

これは Ajax では問題ありませんが、URL が入力された場合は機能しません。 $components[0] != 'access' などは、ユーザーがログイン画面にいる場合にこの条件の実行を停止するだけです。

ヘッダーの場所が Ajax 呼び出しに影響を与えず、ユーザーが禁止された URL にアクセスしたときにエラー メッセージを単にエコーしないようにするにはどうすればよいですか?

4

2 に答える 2

0

ヘッダーの場所が Ajax 呼び出しに影響を与えず、ユーザーが禁止された URL にアクセスしたときにエラー メッセージを単にエコーしないようにするにはどうすればよいですか?

これを実現するには複数の方法があります。ここでは 2 つの方法について説明します。

リファラーを確認する

まず、HTTP リファラーを確認できます。ブラウザは、現在のページにリンクしているページの URL を HTTP ヘッダーとして送信します。

http://foo.invalid/blah/?action=newfolder.phpユーザーがフォーム/リンクをクリックしたときのへのこの (短縮された) HTTP 要求を見てください。

リクエスト

Request URL:http://foo.invalid/blah/?action=newfolder.php
Request Method:POST

ヘッダー

Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:foo.invalid
Referer:http://foo.invalid/

「リファラー」フィールドがあることがわかります。ユーザーが直接開いた場合http://foo.invalid/blah/?action=newfolder.php、リファラー フィールドはありません。

ソース

<?php 
if (empty($_SERVER['HTTP_REFERER'])) {
    // Redirect to login (Referer empty)
} else {
    // Show JSON warning (Referer not empty)
}
?>

ただし、一部のユーザーはプライバシー上の理由でリファラーを無効にしたり偽装したりするため、このソリューションはそれほど信頼できません。

カスタム HTTP ヘッダー フィールドを追加する

より良い方法は、カスタム HTTP ヘッダーを送信することです。カスタム HTTP ヘッダーは AJAX 要求にしか追加できないことに注意してください。JQueryなどの一部のライブラリでは、既にカスタム ヘッダーが追加されています。

ソース ( XMLHttpRequest )

var r = new XMLHttpRequest();
r.open('get', '/blah/?action=newfolder.php');
r.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
r.send(null);

リクエストにカスタムX-Requested-Withヘッダーが含まれるようになりました。ヘッダーが見つからない場合は、URL を入力してページが開かれたと見なすことができます。

<?php 
if (empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    // Redirect to login (X-Requested-With empty)
} else {
    // Show JSON warning (X-Requested-With not empty)
}
?>
于 2013-01-03T12:52:13.007 に答える
-1
$UserName = "username";
$PassWord = "password";

if ($_SERVER['PHP_AUTH_USER'] != $UserName || $_SERVER['PHP_AUTH_PW'] != $PassWord) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.1 401 Unauthorized');
        die('Your username and password is incorrect');
                    // or you can redirect user if username or password is incorrect
                header("Location:"your redirecting url);              
} 

あなたに役立つかもしれないこのコードを使用してください....

PHP での認証の詳細については、以下のリンクを参照してください。

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

于 2013-01-03T07:31:30.783 に答える