sábado, 12 de novembro de 2011

Cerca de trabalhar CodeIgniters Biblioteca Session Padrão


Recentemente eu estava tentando testar um aplicativo web usando BrowserCam . BrowserCam tem um banco de máquinas virtuais em versões diferentes de muitas plataformas, incluindo Apple OSX, Fedora Linux, e Windows. Durante a tentativa de teste de regressão em versões antigas do IE eu percebi que absolutamente não pode fazer login na minha aplicação. Isso só ocorreu em BrowserCam. Depois de testar outras CI sites baseados em BrowserCam eu eventualmente reduzi-lo a CodeIgniters biblioteca sessão .
A biblioteca da sessão que vem com o CI não usa o nativo arquivos de sessão baseado em PHP. Em vez armazena tudo em um cookie criptografado. Eu acho que isso é ruim por dois motivos: Um, que vai contra uma desenvolvedores PHP sabedoria convencional de como as sessões são manipulados e dois, os cookies têm uma limitação de armazenamento.

Depois de picar em torno de algumas soluções resolvi tudo lá fora me faria ter que mudar um monte de código. Eu precisava de uma queda de substituição que me causaria alterações mínimas. Eu escrevi o seguinte biblioteca chamada Trusession. Você simplesmente coloca-lo em seu diretório application / libraries e fazer algumas simples encontrar e substituir. Trusession tem a maioria dos nomes mesmo método, parâmetros e valores de retorno como CodeIgniters biblioteca sessão nativa, para sua aplicação deve começar a trabalhar novamente para fora da caixa só que agora será usar phps arquivo sessões baseado. Existem alguns dos métodos públicos que eu não implementei, chamando estes irão resultar em uma exceção dizendo que não foi implementado e lhe dará um rastreamento de pilha. Estes podem ser facilmente implementadas por engenharia reversa a biblioteca Sessão CI.


se  ( ! definido ( "BasePath ' ) )  exit ( "Não há acesso direto roteiro permitido ' ) ;

classe Trusession {

    função __construct ( $ params  =  matriz ( ) ) {
        session_start ( ) ;
    }

    função set_userdata ( $ NewData  =  matriz ( ) ,  $ newval  =  '' ) {
        @ session_start ( ) ;

se  ( is_string ( $ NewData ) )
{
$ NewData  =  matriz ( $ NewData  =>  $ newval ) ;
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$_SESSION['__userdata'][$key] = $val;
}
}
        $this->sess_write();
    }

    function userdata($item){
        @session_start();
        return ( ! isset($_SESSION['__userdata'][$item])) ? FALSE : $_SESSION['__userdata'][$item];
    }

    function sess_destroy(){
        if(isset($_SESSION)){
            @session_start();
            session_destroy();
        }
    }

function unset_userdata($newdata = array()){

if (is_string($newdata))
{
$newdata = array($newdata => '');
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
unset($_SESSION['__userdata'][$key]);
}
}

$this->sess_write();
}

    function sess_write(){
        session_write_close();
    }

    function sess_read(){
        throw new Exception(__FUNCTION__.' Not implemented');
    }

    function sess_create(){
        throw new Exception(__FUNCTION__.' Not implemented');
    }

    function sess_update(){
        throw new Exception(__FUNCTION__.' Not implemented');
    }

    function set_flashdata($newdata = array(), $newval = ''){
        throw new Exception(__FUNCTION__.' Not implemented');
    }

    function keep_flashdata($key){
        throw new Exception(__FUNCTION__.' Not implemented');
    }

    function flashdata($key){
        throw new Exception(__FUNCTION__.' Not implemented');
    }
}



Your find and replace should do the following with in your application directory:

Find “->session” and replace with “->trusession”

Find “->(‘session’)” and replace with “->(‘trusession’)”

You may also need to update your autoload configuration file if you’re autoloading CIs session library. This is obviously not an ideal solution, but short of CodeIgniter giving you the option to use file based sessions I feel this is the least intrusive. Luckily there is some chatter going on about fixing this. What CodeIgniter should do is give you the option in the config file to use cookies (its default), a database, or files for session storage.

Nenhum comentário :

Postar um comentário

Total de visualizações de página