2015-09-06 2 views
0

Я создал сайт электронной коммерции, где после размещения заказа я перенаправляю пользователей на страницу успеха с номером заказа. Если номер заказа не существует, тогда id будет передан. Но есть проблема, когда нет номера заказа или идентификатора заказа, а затем слишком успешная страница показывает некоторые предыдущие заказы, размещенные при вставке прямого url. Например: www.mywebsite.com/order/success/5000, здесь 5000 не существует, поэтому он должен перенаправить меня на страницу ошибок 404.Предотвращать прямой доступ к url ​​в codeigniter

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

Люди, я не» у вас есть много знаний о codeigniter, но вы должны, вероятно, поставить проверку перед перенаправлением, чтобы убедиться, что идентификатор существует, например: '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 direc его перенаправление на страницу ошибки 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

Смежные вопросы