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