2015-09-06 135 views
0

我已經創建了電子商務網站,在下訂單後,我將用戶重定向到具有訂單號的成功頁面。如果訂單號不存在,那麼id將被傳遞。但是,如果沒有訂單編號和訂單編號,則存在問題,那麼如果直接鏈接被粘貼,成功頁面就會顯示以前的一些訂單。例如:www.mywebsite.com/order/success/5000,這裏5000不存在,所以它應該重定向到404錯誤頁面。阻止codeigniter中的直接url訪問

MY_controller

$order_num = $this->order_model->getOrderNum($order_id); 

if(empty($order_num)){ 
    $order_num = $order_id.'/id'; 
} 

$redirect_url = 'order/success/'.$order_num.'/'; 
?> 
<script> 
    function redirect_success(url) { 
     location.assign(url); 
    } 
    var success = '<?=$redirect_url?>'; 
    redirect_success(success); 
</script> 

My_Model

public function getOrderNum($order_id = ''){ 
    $returnVal = false; 

    $sql = "SELECT order_num FROM order_table"; 
    $sql .= " WHERE order_id = '{$order_id}'";  

$query = $this->db->query($sql); 

    if($query->num_rows() > 0){ 
    $result = $query->result_array(); 
    $row  = $result[0]; 
    $returnVal = $row; 
    } 

    return $returnVal['order_num']; 
} 
+0

男人,我不t對codeigniter有很多瞭解,但是你應該在重定向前確認id是否存在,如:if(isset($ order_num)){// redirect' – user5173426

+0

它不工作@HawasKaPujaari。 stil顯示我以前的訂單 – nishu

回答

0

一種方法是在訂單/成功控制器檢查頁面引用者是否從定單/地方來頁。

所以爲了/成功,如果HTTP_REFERER頭未設置或不從訂單/位,重定向到404

添加,以便/成功/控制器:

if(!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], "order/place") === -1) { 
    $this->load->helper('url'); 
    redirect('/page404'); 
} 
+0

謝謝@Jackie這部分解決了我的問題。當用戶嘗試訪問成功的url直接將其重定向到404錯誤頁面。但是當用戶再次刷新成功頁面時,它顯示以前的順序。我想阻止用戶防止頁面刷新。進一步的幫助將真正被讚賞! – nishu

+0

您可以通過將$ _SESSION ['success_viewed'] = false;按順序/地點,然後按順序/成功添加$ _SESSION ['success_viewed'] = true ;.然後在上面的檢查代碼中添加if(!isset($ _ SESSION ['success_viewed'])|| $ _SESSION ['success_viewed'] == true){redirect('/ page404'); }。請記住添加session_start();在使用會話之前。 – Jackie

+0

謝謝@Jackie。 – nishu