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'] 中
}
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言