2

別のサイトの iframe で使用するように設計された symfony サイトを持っています。Safari は iframe に Cookie を設定させないため、Safari を除くすべてのブラウザで問題なく動作します。ログインする代わりに、エラーのない空白のログイン ページに戻ります。

私が試してきた解決策は、PHPSESSID をフォームの非表示フィールドとして設定し、それを使用して Cookie の代わりにセッションを追跡することです。私が抱えている問題は、ログイン後、formlogin が新しいセッション キーを設定してリダイレクトを送信しているように見えることです。このリダイレクトで正しいセッション キーを取得できません。

app.php の最後に以下を追加して、リダイレクトされた URL の最後にセッション キーを追加しようとしました (これは非常にシンボリックではありませんが、かなり必死になっています)。

foreach(headers_list() as $header) {
    if (substr($header,0,9) == "location:") {
        if (strpos($header, '?')===FALSE && strpos($header, '#')===FALSE ) {
            header($header."?PHPSESSID=".session_id());
        }
    }
}

これによりセッションキーが追加されますが、フォームログインによって作成された新しいセッションキーではなく、古いセッションキーが追加されているようです。その結果、ログインしようとすると、「セッションがタイムアウトしたか、Cookie が無効になっています。」というメッセージが表示されます。

正しい session_id を取得するにはどうすればよいですか? これを行うより良い方法はありますか?

4

1 に答える 1

1

得られるのは、悪意のあるユーザーがセッションを偽造するのを防ぐための追加のセキュリティ チェックです。ログイン フォームを含むページをロードし、すべての Cookie を削除してから認証を試みると、同じ動作が発生します。

チェックはこの行で定義されます。チェック方法は自明であり、非常に明確です。

あなたの特別なタスクでは、これは好ましい動作ではないので、このクラスをオーバーライドする必要があります。

カスタム認証プロバイダーの作成方法に関する非常に優れたドキュメントがあります。これがインスピレーションの出発点になる可能性があります ;)

于 2012-08-13T21:13:54.537 に答える