お世話になります。
PRGパターンを使用してリダイレクトした場合、
POSTした際のリクエストがリファラーに残らず、戻るボタンを押して進むボタンを押しても
再送信の確認画面が出ないという利点があると思いますが、
なぜ、リダイレクトするとリファラにPOSTしたときの情報が残らないのでしょうか。
そういう仕様だと言われればそこまでなのですが、
何かそのあたりの説明が分かり易く載っているサイトなどあったら教えていただけると助かります。
よろしくお願いいたします。
〇追記:コード例
検証用に作成したコード、フレームワークcodeigniterを使用しています。
処理の流れは以下の感じ
1.申し込み画面(entry.php)
2.申し込みボタンを押してPOST
3.サーバー側で登録後、リダイレクト(Location: http://root/recruit/entry/complete_entry)
4.クライアントリダイレクト要求を受け取ってhttp://root/recruit/entry/complete_entryにリクエスト
ここで2のリファラが残らないのはなぜでしょうか。
PHP
1<!--view/entry.php--> 2 3<?php echo validation_errors(); ?> 4 5<?php echo form_open('entry/post'); ?> 6 <div class="wrapper"> 7 <div class="entry_contents"> 8 <div class="contents_label"> 9 <label>お名前</label> 10 </div> 11 <div> 12 <input type="text" name="last_name" /> 13 <input type="text" name="first_name" /> 14 </div> 15 </div> 16 17 <div class="entry_contents"> 18 <div class="contents_label"> 19 <label>メールアドレス</label> 20 </div> 21 <div> 22 <input type="email" name="email" /> 23 </div> 24 </div> 25 26 <div class="entry_contents"> 27 <div class="contents_label"> 28 <label>電話番号</label> 29 </div> 30 <div> 31 <input type="text" name="phone_num" /> 32 </div> 33 </div> 34 35 <input type="submit" name="post" value="申し込み"/> 36 </div> 37</form>
PHP
1<?PHP 2<!--controller/Entry.php--> 3class Entry extends CI_Controller { 4 public function __construct() 5 { 6 parent::__construct(); 7 $this->load->helper('url_helper'); 8 $this->load->helper('func'); 9 $this->load->library('form_validation'); 10 } 11 12 public function post() 13 { 14 // entryモデルクラスロード。指定はすべて小文字で指定 15 $this->load->model('entry_model'); 16 17 // バリデーションルールセット 18 $this->form_validation->set_rules('last_name', '姓', 'required'); 19 $this->form_validation->set_rules('first_name', '名', 'required'); 20 $this->form_validation->set_rules('email', 'メールアドレス', 'required|valid_email'); 21 $this->form_validation->set_rules('phone_num', '電話番号', 'required'); 22 23 // バリデーションチェック 24 if ($this->form_validation->run() === FALSE) { 25 // チェックエラー 26 $this->view_wapper('entry'); 27 28 } else { 29 // 正常系 30 31 //データ登録 32 $this->entry_model->create_entry(); 33 34 //PRGパターン。リダイレクト 35 header("Location: http://root/recruit/entry/complete_entry", false, 303); 36 exit(); 37 } 38 } 39 40 public function complete_entry() 41 { 42 $this->view_wapper('entry_done'); 43 } 44 45 public function index() 46 { 47 $this->view_wapper('entry'); 48 } 49 50 private function view_wapper($contents) 51 { 52 $this->load->view('templates/header'); 53 $this->load->view($contents); 54 $this->load->view('templates/footer'); 55 } 56} 57
回答2件
あなたの回答
tips
プレビュー