Запретить прямой доступ к URL в codeigniter

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

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

Решение

Одним из способов является проверка в контроллере порядка / успеха, идет ли страница-реферер со страницы заказа / места.

Таким образом, в порядке / успехе, если заголовок http_referer не установлен или нет из порядка / места, перенаправьте на 404.

Добавьте в порядке / успех / контроллер:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]