4

これは非常に単純な質問です。ただし、最初の現実世界で非常に壮大な(サイズの点で)プロジェクトを開始するときに頭に浮かぶ質問です。

Ajax request経由で送信するときにユーザーのID(ユーザー名とパスワード)を確認するにはどうすればよいPHPですか?簡単な解決策があるようです。リクエストでユーザー名とパスワードの両方をPOST variables他のユーザーと一緒に送信することですが、解決策は非常に非効率的であるように思われます(リクエストが行われるたびにデータベースをチェックインする必要があるため)さまざまなAjaxリクエストに対して非常に冗長です)。

TwitterがAjaxリクエスト(新しいツイートの投稿など)をどのように行うかを調べましたが、リクエストで認証情報を送信しているのはわかりませんが、実際には私のプロフィールの所有者である私であることがわかります。 、新しいツイートを投稿するためにAjaxリクエストを送信しますか?

それが誰かが素晴らしい解決策を思い付くのを助けるなら-私はJQueryAJAXライブラリとCodeIgniterPHPフレームワークを使用しています。

ありがとう!

4

2 に答える 2

5

Ajaxリクエストは、他のHTTPリクエストとまったく同じです。JavaScriptを介して行われる場合でも、ブラウザのアドレスバーにURIを入力する場合でも、これらはすべてHTTPリクエストです。

ユーザー名とパスワードをHTTP経由で送信するのは間違った解決策であるというのは正しいことです。ただし、ユーザー名/パスワードの送信は通常1回必要ですが、プレーンテキストとして送信されないように、これはHTTPSでのみ実行する必要があります。認証されると、将来のリクエストでアクセスできるように、ユーザーIDをサーバー側のセッション変数に保存できます。

途中で役立つ小さな擬似コード:

if(!empty($_SESSION["userId"])) {
    // User is authenticated. Do something.
}
else if(!empty($_POST["username"])) {
    // User is attempting to log in. Check against database.
    $userId = getUserIdByUsernamePassword($_POST["username"], $_POST["password"]);

    // Store user id in session variable.
    if($userId > 0) {
        $_SESSION["userId"] = $userId;
    }
}
else {
    // User is not authenticated.
}

よくある落とし穴は、認証をCookieに保存することです。Cookieはクライアント側に保存されるため、この方法で行うと、誰でも独自のCookieを作成して認証を偽造できます。

PHPでセッション変数を使用すると、Cookie使用されますが、Cookieはユーザーをまったく識別せず、クライアントとサーバー間の接続を識別します。

ただし、実際のプロジェクトを正常に認証するには、セッションCookieに依存しないでください。むしろ、セッション変数、UUID cookie、およびソルトハッシュcookieの組み合わせにより、認証の整合性を高めることができます...しかし、これはまったく別のトピックです。

于 2012-06-26T19:35:22.527 に答える
0

これを行うための最良の方法(そしておそらく唯一の方法)は、ajaxを介して要求されているファイルに、ユーザーが(セッションなどを介して)ログインしていることを確認させることだと思います。詳細は通常望ましくないソースコードに含まれているため、リクエストとともに詳細を送信することはお勧めしません。

于 2012-06-26T19:32:50.897 に答える