0

この単純なログイン スクリプトがあります。

$.ajax({
        type: 'POST',
        url: 'authorize.php',
        data: { username: user, password: pass },
        dataType: 'json',
        success: function(data) {
            if (data.status == "loggedIn") {
                //Logged in
            } else {
                //Not logged in
            }
        }
    });

ログインが必要なページはどこ//Logged inにありますか? ページを単純$.loadに表示することはできますが、ユーザーが最初にこのファイルを参照するだけでログインを確認する意味は何でしょう?

4

5 に答える 5

1

データがアクセスされないようにするには.htaccess、Apacheのを使用することを検討する必要がありますmod_rewrite。ユーザーが機密データの可能性がある部分を要求するたびに、目に見えない形でPHPページを呼び出し、要求されたデータまたはを提供します403 Forbidden

例:

.htaccess

RewriteEngine On
RewriteRule ^user-content/(.+) display_content.php?file=$1

次に、ユーザーコンテンツでアクセスされるファイルはすべて、を介して再ルーティングされますdisplay_content.php。この.htaccessファイルを使用して、リファラーが存在する場合にリソースの表示を拒否することにより、ホットリンクを防ぐこともできます。

display_content.php

<?php
if (isLoggedIn($_COOKIE["username"], $_COOKIE["password"]) && isset($_GET["file"])) {
    if (mimeTypeOk($_GET["file"]) { // Implementation not shown
        readfile($_GET["file"]);
        exit();
    }
}
header("403 Forbidden");
?>
于 2012-06-07T02:08:16.667 に答える
1

プレゼンテーションの問題です。別のファイルに div をロードするだけでよく、全体をロードする必要はありません。

私は ajax を使用してログインし、 $.load を使用して、テンプレート ファイルにある div を「取り込み」ます。デザインを変更する必要があるときに簡単になるからです。

作業を個々の「ピース」に分割すると、変更が容易になることを忘れないでください。20 の個別のテンプレートに同じログイン ボックスがあるとします。1つ変更すると、さらに19個変更する必要があります。

于 2012-06-07T01:57:10.100 に答える
1

PHP Sessionsこれらすべてのページで使用することをお勧めします。移動しようとしているページで、ユーザーが実際にログインしていることを確認し、成功した場合はページ$.loadでユーザーをログイン済みとして設定します。authorize.php

このように、ユーザーがページのソースを見て、何を読み込んでいるかを確認しても、そのページにアクセスしようとしても、ユーザーがすでにログインしているかどうかを確認しているため、何もしません。

于 2012-06-07T02:01:31.660 に答える
1

javascript (jquery) はクライアント側であり、簡単に無効にしたり変更したりできるため、ユーザーが javascript (jquery) で何かをするのを防ぐことはできません。

あなたができることは、単に$.loadあなたが言うようなページですが、コンテンツを送信する前に実際のログインをチェックするロードされたページのセッションに対してチェックを行うこともできます。ログインの成功を示すために、authorize.php の一部としてセッションに変数を設定する必要があります。

于 2012-06-07T02:02:38.713 に答える
0

これを最も安全な方法で行うには、ユーザーがログインしているかどうかを確認するために、クライアント側の方法としてjQueryを使用し、サーバー側の方法としてPHPを使用する必要があります。 jQueryを使用してページ全体を作成するには、次のコードを使用してdiv部分のみをロードします。

$("#load_dom").click(function(){  
$("#result")  
    .html(ajax_load)  
    .load(loadUrl + " #picture");  
});  

次に、セキュリティ対策として、次のように$ _SESSION変数をチェックして、PHPを使用してページへのアクセスを制限します。

if (!isset($_SESSION['userid'])) {
    // user is logged in
} else {
    // user is not logged in
    die("You are not logged in.");
}
于 2012-06-07T03:26:20.270 に答える