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

rails:2661

From: makoto kobori <kobori@c...>
Date: Tue, 29 Apr 2008 00:57:16 +0900
Subject: [rails:2661] Re: Rails ページ制御方法

こぼりです

色々ありがとうございました。

その後、試行錯誤した結果

・renderで、一番最初の画面に飛ばすと、ちゃんと表示される。
しかし、この場合、Token生成のロジックを通らないので、あまり意味無く・・・

・redirectで、存在しないアクションを指定しても、アクションがいない、と、
エラーがでない。
 redirectが、なぜか機能していない?

・Railsのログをみると、
Redirected to http://localhost:3000/ctl/ask_q
Completed in 0.01600 (62 reqs/sec) | DB: 0.01500 (93%) | 302 Found
[http://localhost/ctl/confirm_ask_q]

で、止まっている。。。

とりあえず、二重投稿等は防げているっぽいので、良しとします。

ありがとうございました。


Masashi Itoh さんは書きました:
> ソラソルの伊藤です。
>
>   
>> 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 さんは書きました:
>>     
>>> ソラソルの伊藤と申します。
>>>
>>>   
>>>       
>>>> ここで、③画面から、戻る画面で、②にいったら、自動で①に飛ぶといった処理
>>>> (つまり、②から③への一方通行のみ許可)をしたいのですが、
>>>> 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:
>>>
>>>   
>>>       
>>>> お世話になってます、こぼりです
>>>>
>>>> 記事投稿機能で、
>>>>
>>>> ①記事投稿画面⇔②確認画面 → ③投稿終了画面
>>>>
>>>> という画面遷移を作りました。
>>>>
>>>> ここで、③画面から、戻る画面で、②にいったら、自動で①に飛ぶといった処理
>>>> (つまり、②から③への一方通行のみ許可)をしたいのですが、
>>>> 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/
>
>   


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