Dicas para utilizar a session do CodeIgniter

Hoje vou dar algumas dicas para utilizar a session do codeigniter, da forma que eu uso em meus projetos.

Utilize Banco de dados

Nunca utilize a session do CI como ela vem por padrão, pois a mesma é utilizada em cookies e só cabe 4kb de dados, ou seja é muito pouco para a maioria das aplicações. Eu gosto de deixar por padrão a mesma com banco de dados ex do config:

$config['sess_cookie_name']		= 'ci_session';
$config['sess_expiration']		= 7200;
$config['sess_encrypt_cookie']	= FALSE;
$config['sess_use_database']	=TRUE;
$config['sess_table_name']		= 'ci_sessions';
$config['sess_match_ip']		= FALSE;
$config['sess_match_useragent']	= TRUE;
$config['sess_time_to_update'] 	= 300;

E você não pode esquecer de criar a tabela em seu banco de dados, segue o código abaixo:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

Utilize o FlashData

O recurso de flash data do CodeIgniter é muito interessante por exemplo para um cadastro, onde você precisa dar uma mensagem de erro ou uma mensagem de sucesso, onde você não precisará mais desta mensagem no futuro.

Veja um exemplo de como utilizar o flashdata

$this->session->set_flashdata('sucesso','Seu produto foi cadastrado com sucesso.');

e na view você pode simplesmente chamar sua varíavel

<h3><?php echo $this->session->flashdata('sucesso');?></h3>

Ps: Lembrando que o flashdata só estará disponível na próxima requisição.

Até hoje eu não tive problema algum utilizando a session do CodeIgniter, espero que estas dicas sejam uteis, e se alguém tiver alguma sugestão de post, por favor, faça nos comentários!

16 Comentários

  1. Olá, trabalhar com session no ci é uma blz, mas me diga, como eu posso para deixar a session para 24h, e se funciona bem em todos browsers, pois estou tendo problemas para criar session no ie. Obrigado e abs

    • Vc tem que configurar sua sessão na opção sess_expiration no config.php, o valor padrão é de 7200 segundos, equivalente a 2 horas. é so colocar o equivalente a 24horas em segundso.
      E cara, por padrão a session do CI trabalha com cookie, ou seja tem um limite de 4k. Eu gosto de usar a session no DB por causa disso. Veja se não é isso que ta atrapalhando no IE.

      Att,

      William Rufino

  2. Eltonsays:

    valew cara !! muito boa essa dica!!

  3. Breno Silvasays:

    Cara to começando a trabalhar com CI, tem erro quando coloco a session no autoload da o seguinte erro:
    An Error Was Encountered
    In order to use the Session class you are required to set an encryption key in your config file.
    Vc pode me ajudar.Valeu

  4. Breno Silvasays:

    Esqueci de informar a versão CI 2.0.3.valeu

    • Opa, tudo bom breno?
      Cara, para utilizar a session, você deve setar uma chave de encriptação, no config.php

      $config[‘encryption_key’] = ”;

      vc pode colocar qualquer coisa nela, é uma chave pra poder decriptografar dados etc

  5. Fredericosays:

    Pessoal, estava com problema no IE com relação a Sessão. Eu criei a tabela descrita acima e resolveu.

  6. Nensays:

    Olá
    Setei a mensagem do flashdata : $this->session->set_flashdata(‘msg’, ‘Usuário ou Senha Inválidos!’); em um controle de login para ser msotrada quando o usuario ou a senha não existem. E tento exibir ela no meu formulário p>session->flashdata(‘msg’)?> mas ela não aparece e qdo o exibo o session_id ele é mostrado. O que pode ser ?
    Obrigada

  7. Marcelosays:

    cara não sou muito bom, mas acho que seu erro é que voce tem que dar um echo,
    session->flashdata(‘msg’);?>

  8. Amigo, Voce saberia como usar Session com o CI e MongoDB!? 😛

    To quebrando a cabeça aqui e nada…

  9. Marcossays:

    Muito bom este post, obrigado, salvou minha vida!

  10. Lucassays:

    Fiz isso tudo tá funcionando legal, mas não estou conseguindo inserir no bd
    eu quero saber se eu tenho que dar o insert na mão ou faz tudo sozinho?
    abraço

  11. Humberto Martinssays:

    Fiz tudo como descrito acima, mudei a configuração no config.php; criei a tabela no banco de dados, inseri o dado na session com o comando $this->session->set_flashdata(‘usuario’,$row->Login); e deu o seguinte erro A PHP Error was encountered

    Severity: Notice

    Message: Undefined property: Welcome::$session

    Filename: controllers/welcome.php

    Line Number: 41 alguém sabe como eu faço pra resolver isto? obrigado

  12. Olá William, não sei se tu pode me ajudar…. Estou com um problema com as sessions do CI. Estou usando as session no DB, mais cada vez q eu crio uma session dois registros sao inseridos no na tabela.

    Tu sabe oq pode ser isso?

    Obrigado.

  13. rafaelsays:

    Ola,William Rufino!
    To tentando fazer uma tabelas de pontos usando session para os pontos ir pra cada usuários,mais eu não sei fazer isso ainda, o senhor poderia me ajudar nisso

Deixe um comentário

Por favor, seja educado. Seu e-mail não será publicado e os campos obrigatórios estão marcados.