1

ユーザー認証の場合、クライアントはサーバーにリダイレクトしてユーザーデータを取得し、クライアント側のphpネイティブセッションに保存します。このプロセスでは、サーバーは同じ要求されたURLにリダイレクトします。そのため、応答するデータがない場合、クライアント側にセッションはなく、セッションが見つからない場合にのみサーバーにリダイレクトするチェックがあるため、スクリプトはリダイレクトループになります。 。

このようなケースを回避するために、uniqid('prefix_')関数を使用して最初のフローの後にランダムセッションを作成しています。ただし、誰かがページを更新した場合、リクエストは認証のためにサーバーに再度送信される必要があります。

そのために、セッションCookieの値を確認しています。cookieに指定されたプレフィックス(uniqidで指定)がある場合、それは有効なセッションではなく、サーバーにリダイレクトされます。このオプションの信頼性を知りたいですか?他に解決策はありますか?

更新:ここで私のvalidSession関数はどのように見えるか:

public function validSession() {
if ($sessionCookie !== null && substr($sessionCookie,0,7) !== 'prefix_')
return true;
return false;
}

したがって、サーバーからのデータがない場合にランダムセッションを作成するために使用されたプレフィックスがセッションCookieに含まれている場合、この関数はfalseを返し、ユーザーセッションのためにサーバーにリダイレクトすることにします。

4

1 に答える 1

0

フロー制御の問題のようです。ログインが失敗した場合にリダイレクトしないでください。

@session_start();
$user = Auth::login($username, $pwd);
if (!empty($user))
{
  $_SESSION['auth_user'] = $user;
  session_write_close();
  header('Location: '.$_REQUEST['next']);
}
else
{
  header('Location: '.Auth::STANDARD_LOGIN_URL);
}

この例では、疑似 Auth クラスを静的ログイン メソッド (失敗時にユーザーまたは false/null を返す) と、ログインする場所を定義する定数と共に使用します。

于 2011-05-18T11:29:37.797 に答える