2012-02-07 11 views
1

私はcodeigniterのURLを暗号化したい。codeigniterのURL暗号化

私の究極の目標は、ドメインの後ろのすべてを暗号化することです。 は、私はアイテムIDを/ encyrpt復号化するために私のコントローラでは、CIの「暗号化」のライブラリを使用することができますexample.com/sdfsdfsff/sdafaergdfsd/dfesDEWrewF

に をexample.com/controller/function/itemidが、他の方法がありますURLのすべてをencyrtptするには?

+1

あなたがフックに見たいかもしれません。 http://codeigniter.com/user_guide/general/hooks.html –

答えて

0

フックを使用する代わりに、CI_URIクラスとCI_Configクラスを単にオーバーライドすることもできます。 URIセグメントをセグメント配列にロードするときには、URIセグメントを復号化する必要があります(恐らく_set_uri_string()メソッド)。次に、オーバーライドされたCI_Configクラス(具体的には_uri_string()メソッド)のセグメントを暗号化する必要があります。ここで

は、あなたの楽しみのために(未テスト)のサンプルです:

<?php 
// application/core/MY_URI.php 
class MY_URI extends CI_URI { 
    function _set_uri_string($str) 
    { 
     parent::_set_uri_string($str); 
     $CI =& get_instance(); 
     $CI->load->library('encrypt'); 
     $parts = explode('/', $this->uri_string); 
     foreach ($parts as &$part) 
     { 
      if ($part) $part = $CI->encrypt->decode($part); 
     } 
     $this->uri_string = implode('/', $parts); 
    } 
} 

// application/core/MY_Config.php 
class MY_Config extends CI_Config { 
    protected function _uri_string($uri) 
    { 
     if (!is_array($uri)) 
     { 
      $uri = explode('/', $uri); 
     } 

     $CI =& get_instance(); 
     $CI->load->library('encrypt'); 
     foreach ($uri as &$part) 
     { 
      if ($part) $part = $CI->encrypt->encode($part); 
     } 

     return parent::_uri_string($uri); 
    } 
}