rails:2660
From: Masashi Itoh <msc@s...>
Date: Mon, 28 Apr 2008 11:50:28 +0900
Subject: [rails:2660] Re: Rails ページ制御方法
ソラソルの伊藤です。 > 3から、IEの戻るボタンを押すと2にいきまして、 > > 警告 : ページの有効期限切れ 「戻る」ボタンで戻る先のページのリクエストメソッドがPOSTの場合、 「有効期限切れ」と表示されてしまいます。 > HTTPのヘッダーをみてみると、redirectはしているようなのですが・・ > なぜでしょうか? 「302 Found」の意味を調べると http://www.studyinghttp.net/status_code#Code302 「GET や HEAD 以外のリクエスト」は「自動的にリダイレクトしてはならない」 みたいな記述があるので、リダイレクトしてくれないのかも。 ちなみに手元の環境ではPOST&302 Foundでもリダイレクトできましたので、 ちょっと原因が分からないです。 対策として思いつくのは ・何かプログラムの不具合があって、そこを直すとOK ・redirect_toではなくて、入力画面をrenderするとOKだったりして ・違うレスポンスコードでリダイレクトさせてみるとか head 303, :location => 飛ばし先 ・Mongrelの場合は「302 Moved Temporarily」になって挙動が変わったりして といった感じでしょうか。 On Mon, 28 Apr 2008 02:51:30 +0900 makoto kobori <kobori@c...> wrote: > こぼりです > > ありがとうございます。 > > 教えていただいたやり方で試しで実装しております。 > が、少々いきずまっております。 > > ----------------------------------------- > 1.入力画面:ファイル名:ask_q > ・トークン(ランダムな長い文字列)を生成してsession変数に配列で保存 > ・今作ったtokenをformにhiddenで持たせる > > 2.確認画面:confirm_ask_q > ・form(というかparams)でtokenを受け取る > ・受け取ったtokenがsessionのトークン配列に存在しなければどこかへ飛ばす > ・受け取ったtokenをformにhiddenで持たせる > > @tk_r=flash[:tk] #flashで保存させて > @tk_p_r=params[:token] #hiddenから > > if(@tk_r !=@tk_p_r) > redirect_to :action => "ask_q" > end > > 3.完了画面 > ・form(というかparams)でtokenを受け取る > ・受け取ったtokenがsessionのトークン配列に存在しなければどこかへ飛ばす > ・DBにINSERTしたら受け取ったtokenをトークン配列から削除する > > ----------------------------------------- > > 3から、IEの戻るボタンを押すと2にいきまして、 > > 警告 : ページの有効期限切れ > 要求したページは、フォームで送信された情報を使用して作成されました。この > ページは、もう利用できません。セキュリティ保護のため、情報は自動的には再 > 送信されません。 > > 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタ > ンをクリックしてください。 > > > とでます、ここで、「更新」をすると、コード上は、1に戻るようになっているのですが、 > 1の画面がでません。真っ白です。HTTPソースは以下になっておりました。 > ------ > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> > <HTML><HEAD> > <META http-equiv=Content-Type content="text/html; charset=utf-8"></HEAD> > <BODY></BODY></HTML> > ----- > > HTTPのヘッダーをみてみると、redirectはしているようなのですが・・ > なぜでしょうか? > > ----以下HTTPヘッダー---- > POST /ctl/confirm_ask_q HTTP/1.1 > Accept: */* > Referer: http://localhost:3000/ctl/ask_q > Accept-Language: ja > Content-Type: multipart/form-data; boundary=---------------------------7d85d32a07d2 > Accept-Encoding: gzip, deflate > User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) > Host: localhost:3000 > Content-Length: 900 > Connection: Keep-Alive > Cache-Control: no-cache > Cookie: _ask_session_id=290afe02fb158ac27ed3231689fe51c3 > > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="question[title]" > > test > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="question[content]" > > test > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="upload[file1]"; filename="" > Content-Type: application/octet-stream > > > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="upload[file2]"; filename="" > Content-Type: application/octet-stream > > > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="question[tag]" > > test > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="token" > > 08e77d614b18eac740097107f611b440 > -----------------------------7d85d32a07d2 > Content-Disposition: form-data; name="commit" > > Confirm > -----------------------------7d85d32a07d2-- > > > HTTP/1.1 302 Found > Cache-Control: no-cache > Connection: Keep-Alive > Date: Sun, 27 Apr 2008 17:43:34 GMT > Content-Type: text/html; charset=utf-8 > Server: WEBrick/1.3.1 (Ruby/1.8.6/2007-03-13) > Content-Length: 97 > Location: http://localhost:3000/ctl/ask_q > Set-Cookie: _ask_session_id=290afe02fb158ac27ed3231689fe51c3; path=/ > > ====ここまで > > テスト環境は、IEのみです。 > > > > > Masashi Itoh さんは書きました: > > ソラソルの伊藤と申します。 > > > > > >> ここで、�2萍未�ら、戻る画面で、�△砲い辰燭蕁⊆�動で�,鉾瑤屬箸い辰申萢� > >> (つまり、�△�ら��への一方通行のみ許可)をしたいのですが、 > >> application.rb等に書くと、簡単に実装できるのでしょうか? > >> > > > > トランザクショントークン(ワンタイムトークン)の仕組みが > > 該当するのかと思います。 > > > > railsとしての仕組みには入ってないのでは? > > 下記のように自力で実装する形になるかと。 > > > > 1.入力画面 > > ・トークン(ランダムな長い文字列)を生成してsession変数に配列で保存 > > ・今作ったtokenをformにhiddenで持たせる > > > > 2.確認画面 > > ・form(というかparams)でtokenを受け取る > > ・受け取ったtokenがsessionのトークン配列に存在しなければどこかへ飛ばす > > ・受け取ったtokenをformにhiddenで持たせる > > > > 3.完了画面 > > ・form(というかparams)でtokenを受け取る > > ・受け取ったtokenがsessionのトークン配列に存在しなければどこかへ飛ばす > > ・DBにINSERTしたら受け取ったtokenをトークン配列から削除する > > > > という実装になるかと。 > > > > ブラウザバックにだけ対応すればよいのであれば > > 下記のような作りにしては如何でしょうか? > > > > 1.記事投稿画面(入力フォーム) > > > > ↓入力フォームをPOSTで送信 > > > > 2.確認画面(入力内容をsessionに保存) > > > > ↓「OK」ボタンが押される > > > > 3.DBにINSERTして、session消して4へリダイレクト > > (sessionが消えていれば1へリダイレクト) > > > > 4.投稿終了画面 > > > > 4からブラウザの「戻る」を押すと2ではなくて3に遷移して > > 結果的に1へ飛ばされます。 > > > > > > > > On Fri, 25 Apr 2008 01:44:37 +0900 > > makoto kobori <kobori@c...> wrote: > > > > > >> お世話になってます、こぼりです > >> > >> 記事投稿機能で、 > >> > >> �ゝ�事投稿画面⇔��確認画面 → �E蟾峠�了画面 > >> > >> という画面遷移を作りました。 > >> > >> ここで、�2萍未�ら、戻る画面で、�△砲い辰燭蕁⊆�動で�,鉾瑤屬箸い辰申萢� > >> (つまり、�△�ら��への一方通行のみ許可)をしたいのですが、 > >> application.rb等に書くと、簡単に実装できるのでしょうか? > >> > >> よろしくお願いいたします。 > >> > >> -- > >> ML: rails@r... > >> 使い方: http://QuickML.com/ > >> > > > > > > ---------------------------------- > > SORASOL ソラソル株式会社 > > 取締役 > > 伊藤 匡(Masashi Itoh) > > msc@s... > > > > 〒153-0051 目黒区上目黒4-41-8 > > TEL&FAX ??-????-???? > > http://sorasol.jp/ > > ---------------------------------- > > > > > > -- > > ML: rails@r... > > 使い方: http://QuickML.com/ > > > > > > > -- > ML: rails@r... > 使い方: http://QuickML.com/ ---------------------------------- SORASOL ソラソル株式会社 取締役 伊藤 匡(Masashi Itoh) msc@s... 〒153-0051 目黒区上目黒4-41-8 TEL&FAX ??-????-???? http://sorasol.jp/ ---------------------------------- -- ML: rails@r... 使い方: http://QuickML.com/
2655 2008-04-24 18:44 [kobori@c... ] Rails ページ制御方法 @ 2656 2008-04-25 02:54 ┣[kamei@w... ] 2657 2008-04-25 05:09 ┗[msc@s... ] 2659 2008-04-27 19:51 ┗[kobori@c... ] -> 2660 2008-04-28 04:50 ┗[msc@s... ] 2661 2008-04-28 17:57 ┗[kobori@c... ]