2012年1月18日 星期三

[PHP程式] 要求登入後自動回到原來網頁繼續原先的流程


問題:

諸如購物網站,有時需要使用者登入或註冊才能進行某些作業,這時都會先跳到登入頁面,然後要怎麼回到原來的頁面繼續原本要進行的作業呢?

解答:

// 建立一個 class 記錄原來要進行的作業

class navigationHistory {
    var $path, $snapshot;

    function navigationHistory() {
      $this->reset();
    }

    function reset() {
      $this->path = array();
      $this->snapshot = array();
    }


    function set_snapshot($page = '') {
      global $PHP_SELF;

      if (is_array($page)) { //這裡是記錄原來作業的主要程式段
        $this->snapshot = array('page' => $page['page'],
                                'mode' => $page['mode'],
                                'get' => $page['get'],
                                'post' => $page['post']);
      } else {
        $this->snapshot = array('page' => basename($PHP_SELF),
                                'mode' => (($_SERVER['HTTPS'] == 'on') ? 'SSL' : 'NONSSL'),
                                'get' => $_GET,
                                'post' => $_POST);
      }
    }
}


//從原先的活動離開前,利用上述 class,將原有活動狀況記錄到 SESSION 中

session_register('navigation');
$_SESSION['navigation'] = new navigationHistory;
$_SESSION['navigation']->set_snapshot();
redirect(FILENAME_LOGIN); //然後才轉往登入或註冊程式
[redirect()的核心為header('Location: ' . $url); 細節略]

//在登入或註冊完成時,根據剛才的記錄,繼續原來的作業

if (sizeof($_SESSION['navigation']->snapshot) > 0)
{
   $origin_href = href_link($_SESSION['navigation']->snapshot['page'], $_SESSION['navigation']
                         ->snapshot['get'], $_SESSION['navigation']->snapshot['mode']); //這個涵式 (未詳述)          把剛剛記錄的網頁、模式和GET參數寫成網址字串

    redirect($origin_href); //重心導向回原作業,其中POST參數在$_SESSION['navigation']                      ->snapshot['post'] 中
 }

沒有留言: