2012-01-27 10 views
0

セグメントをコントローラに渡そうとしています。 urlはbase_url/controller/function/seg1のようなものです。ユーザーがアドレスバーにセグメントを入力しようとすると、コントローラーは、通過したいセグメント以外の他の単語がないことを確認します。コントローラに渡されたセグメントをCIで保護する方法

たとえば、アドレスバーのbase_url/main/function /(これを他の単語に変更)を入力しようとすると、コントローラはセグメントをフィルタリングします。私はそれを行う方法がわかりませんし、誰かが私を助けることができれば感謝します。

答えて

1

さて、このようなことから「保護する」最も良い方法は、ユーザーがそのセッションに格納されている2つの値を使用してサイトにログインするときにセッションを作成することです。

1)彼らのデータベースの主キーID、および 2)「LOGGED_IN」あなたのユーザーがあなたのサイトにログインします時

と呼ばれるセッションの項目は、このような2つの値を格納します。

$this->session->set_userdata('logged_in', true); 
$this->session->set_userdata('user_id', $id); 

ここで、$ idは認証時にユーザーレコードから取得されます。

ここでは、コントローラの中に、ユーザがログインしているかどうかをチェックするif文を置くということです。

function show($id) { 
    if($this->session->userdata('logged_in')) { 
    $posts = $this->Model_posts->get_user_posts($id); 
    } 
} 

今、あなたのモデルでは、あなたは、ユーザーが自分のuser_idに基づいて表示できるようにしたいレコードを引くための関数を作成します。例えば、ユーザーの投稿と言うでしょう。今

function get_user_posts($user_id, $post_id) { 
    $sql = "SELECT * FROM posts WHERE user_id = ? AND id = ?"; 
    $binds = array($user_id, $post_id); 
    $qry = $this->db->query($sql, $binds); 
    $result = array(); 

    while($row = $qry->result_array()) { 
    array_push($result, $row); 
    } 
    return $result; 
} 

、ユーザーや訪問者でログインし、それらに属していないレコードにアクセスしようとすると、彼らはすべてのレコードを取得しませんだけで、そのユーザーに返却何select文を制限するので。

+0

が理解される。助けてくれてありがとう!!! – FlyingCat

+0

うれしい私は助けることができました。私はこれがあなたが撮影していたものだと確信しています。 – Skittles

1

あなたは

ので
base_url/controller/action 

がある持っている構造は、あなたのコントローラがすでにそれを「フィルタリング」されますが、コントローラ(メソッド=アクション)のメソッド/機能を持っていない場合ので、あなたのコントローラ404 Page Not Foundエラーが発生します。大まかには、あなたが合っているように見せてもエラーを処理することができますが、提示したものからフィルタリングする項目をコントローラアクションと呼びます。

http://www.base_url.com/users/add 

は、ユーザーコントローラでadd(関数)を呼び出すことを示します。

追加アクションに引数を渡したい場合は、次のようにします。

http://www.base_url.com/users/show/1 

ここで、showはコントローラアクションになり、1は表示するユーザーのIDになります。 私はMVCの方法論に基本的なイントロを与えているようですが、私が言ったように、あなたが示した構造は、私が説明したように演じています。

これが役に立ちます。

+0

返信Skittiesありがとう。私は私の質問が私が知りたいと思うより少し離れているのではないかと心配しています。私が "base_url/function/seg1"と言ったとき、私は実際には "base_url/controller/function/segment1"を意味し、ユーザーがsegment1を好きな言葉に変更してアプリケーションを駄目にするのを恐れています。あなたの例では、http://www.base_url.com/users/show/1です。私はユーザーが1から100に変わることを望んでいません。とにかくそれを防ぐことができますか?再度、感謝します。 – FlyingCat

+0

私はあなたが所有していない可能性のある他のレコードを見ることができないようにしようとしていると仮定しています。 – Skittles

+0

はいSkittles ... – FlyingCat

関連する問題