[前][次][番号順一覧][スレッド一覧]

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...         ]