2011-08-05 22 views
4

サイト検索に使用するフォームのページがあります。このフォームはPOST動詞を使用して検索するデータを送信します。検索結果は、送信後にフォームの下に表示されます。リダイレクト()を使用するとセッションIDが変更される

IEで「ページが期限切れになる」問題を解決するために、私はいわゆるPRGパターン(http://en.wikipedia.org/wiki/Post/Redirect/Get)を使用します。私は同じURLにリダイレクトする私のビューのpost()メソッドからdjango.shortcuts.redirect()を返します。

問題が発生すると、302応答後に送信されたGET要求に関連するさまざまなセッションIDが表示されます。結果をページに分割できるようにフォームにセッションを保存しているため、結果が一貫しません。

私はapache/mod_wsgiの下でdjangoを実行します。 apacheは多くとも3つのプロセスで実行するように設定されています。

httpdを再起動した直後に起こることはなく、httpdプロセスによって消費されたメモリ量がある限界に達した後に起きているようです。

送信ボタンを繰り返し押すと、フォームがセッションから読み込まれ、入力した検索文字列が表示されます。セッションが変更されると、フォームは空白になります。したがって、これが起き始めると、フォームは2回連続して正常に読み込まれ、3回目にsubmitを押すと空白が返されます。つまり、サーバーは新しいセッションCookieを返しました。これはServerLimitの設定と関係があるようです。

どうしたのですか?何か案は?

おかげ

コンスタンチン

+0

すべてのブラウザで同じ動作をしますか?永続的なリダイレクトと一時的なリダイレクトを取得したときにIEが何か変わったことをするのだろうかと思います。なぜ永続的なリダイレクトを使用したいのですか?それは事実上「今からすべての投稿を最終的なGETページにしなければならない」と言っているのではないでしょうか? – Ted

+0

私は自分の質問を編集しました。この問題はhttp 302でも発生します。 – akonsu

+0

私は同じ問題を抱えています。どのようなAntivirus/Network Security Suiteをお使いですか? –

答えて

0

IEはそれが302リダイレクトを取得し、新しい接続を開きます。これが、あなたのページが問題を解決した理由です。しかし、それはまたあなたが新しい「セッション」を提供していることを意味します。

接続に依存する以外に、セッション全体を302で追跡する必要があります。

+0

あなたはIEが301で新しい接続を開くことを意味しますか?私は同じセッションをいくつかの301にまたがって続けているので、新しい接続を開くようには思われません。 – akonsu

+0

私は自分の質問を編集しました。この問題はhttp 302でも発生します。 – akonsu

+0

IEはどちらの接続でも同じCookieを送信する必要があります。ありがとう。 –

1

正しいDjangoのセッションのアプリケーションを使用していますか?

この場合、現在のセッションIDは、設定名がSESSION_COOKIE_NAMEであるクッキーに保存され、デフォルトではsessionidに設定されます。 Firefoxでこの問題が発生していないので、あなたのセッション処理とDjango内のストレージが正常に動作していると想定するのは安全だと思います。

ここで最も大きな原因は、IEがセッションIDクッキーを失っている/削除しているため、リダイレクト後に新しいセッションが開始されることです。被験者の素早いgoogleがこれを確認しているようだ。実際にあなたの問題を解決するために、

今:

あなたがでいくつかの関連情報を参照することができます。 DjangoはセッションCookieを設定しません(セッションデータを設定した場合など)。あなたがPOST時にセッションデータを設定する場所がビュー内にあれば、IEはセッションIDを設定しているクッキーを破棄します。

これは、POSTの前にフォームを表示するために、GET中にセッションにいくつかの迷惑データ(またはデフォルト値?)を保存するだけです。IEはセッションIDクッキーを取得します。うまくいくはずです。

+0

ありがとう。私はこれがIEだけの問題だと思った。 Firefoxでも見たので、サーバの設定に何か問題があると思います。だから私は自分の質問を編集し、今はIEについて言及していない。とにかく検索に使用されているので、私はGETへのPOSTの変更に終わりました。リンクに感謝します。 – akonsu

関連する問題