CodeIgniter, Internet Explorer e o tempo de expiração da sessão

12

Posted by flaviosilveira | Posted in Browsers, CodeIgniter, Php | Posted on 17-01-2009

Nesta Quinta-feira antes de sair do trabalho me deparo com uma surpresa no novo sistema que estou trabalhando. O login de acesso havia parado de funcionar no Internet Explorer. No Firefox tudo normal. Chata mania de ficar testando só no Firefox por conta das facilidades como Firebug e WebDeveloper, ai quando vamos testar no browser do usuário acontece essas coisas.

Sexta pela manhã, foi minha primeira tarefa do dia. Achei que seria algo bobo. Realmente era, mas levei 4 horas para descobrir.

Comecei pelos arquivos de JavaScript vendo se estava tudo ok.
Os retornos via ajax do banco estavam ok.
Parti para os controllers que gravam a sessão no browser.
Comentei a biblioteca que faz verificação da sessão para deixar eu acessar livremente a aplicação. Dei um print no valor da sessão, que pelo codeIgniter se verifica assim:

//Não esqueça de chamar o helper session
// Login é o valor que eu estava gravando na sessão
print($this->session->userdata('login'));

// A tradicional global session não funcionará no codeIgniter
print($_SESSION['login']);

No Firefox tudo ok. No Internet Explorer em branco. Que beleza, o Internet Explorer não está deixando escrever na sessão…

Navegando pelo segundo cérebro não tive nenhuma resposta conclusiva. As soluções propostas não se encaixavam para mim. Atualizar versão do apache, tirar Underlines da url, tirar números do nome do servidor, nada disso fez sentido pra mim.

Sem idéias, me juntei ao meu amigo Ronie e ao Rafael que também faz parte da minha equipe nesse projeto para caçar uma solução.

Tiramos o redirecionamento do Login, para manter na mesma página. E demos ali também um print, dessa vez em todos os valores da sessão

//Print_r por se tratar de array
print_r($this->session->userdata);

Os valores estavam ali, o problema estava no redirecionamento então.

Quebramos a cabeça demais, e como antes estava funcionando no IE, resolvemos rever tudo de brusco que mudamos no sistema.
Verificamos rotas, Jquery e seus plugins, Verificações de nível de acesso, nada.
Até que me lembrei que havia mudado a configuração da sessão, para expirar em meia hora (1800 segundos) tirando do padrão de duas horas (7200 segundos) que vem no CodeIgniter. Esses valores são alterados no config.php, ali você dá de encontro com outras configurações para sua sessão, como nome dela e etc.

E, Sim, era isso. Voltamos ao default do codeIgniter e tudo voltou a funcionar. Me lembro de ter tido uns problemas similares trabalhando com PHP sem frameworks, mas nem suspeitava. Fomos testando para ver o mínimo que o IE iria aceitar de tempo de expiração. Chegamos no valor de 3835 segundos. Mesmo assim continuou muita instável, e setamos em 4000 segundos.

Problema resolvido após 4 horas de Prints, Alerts, Pesquisa, Palpites e Indignação…

Valeu..
Abraços !!!

Share and Enjoy:
  • Print
  • Digg
  • Facebook
  • Google Bookmarks
  • email
  • LinkedIn
  • PDF
  • Twitter

Comments (12)

Maldito IE, sempre atrasando nossos sites. haha.
Deu trabalho mais com certeza esse post vai ajudar varias pessoas.
Muito bom o post!

Cara, isso é pra dar nos nervos mesmo, mais é de lei ^^

Parabens pelo site, ja ta nos favoritos aki

Toma cuidado só pra vcs nao estaram trabalhando demais (normal pra kem gosta, que nem eu que ja trampei 12h por dia) heuaeau, mas que trava a memoria vez ou outra…

Bom site e T+!

“Navegando pelo segundo cérebro não tive nenhuma resposta conclusiva.”
O que é “segundo cérebro”?

Obrigado

Sempre cito o segundo cérebro nos meus posts, foi uma falha não ter linkado nesse….

Segundo cérebro é o Google..

Abraço !!

Tá valendo, nunca tive essa problema, porém… vamo ve ne !

Ei, a session nativa do CI é cookie?

Flávio, estou tendo um problema semelhante, mas eu gravo as sessions do CI em cookie.
No FF funciona perfeitamente, no IE não funciona nem com reza brava!
Tem alguma coisa em mente que possa me ajudar?
As configurações de session/cookie estão todas default.

Valeu!

Marco…

Se não é o que me ocorreu ai….
tente o seguinte…

Vc consegue resgatar os dados desse Cookie em algum momento ?? Se sim…tente acompanhar pra ver em q momento ela “some”..e ali então tentar achar o problema…

Se não, esse cookie nem deve estar sendo criado…
Use umas ferramentas como web developer para te ajudar…

Pessoal,
gostaria de saber se algum de vcs já usaram
print_r($this) no CI.

Ele retorna tanta coisa carregada.

Isso acontece com vcs ?

Grato

Esse problema ocorre devido a diferença de horários entre o servidor e sua maquina de testes, ou seja, você resolveu o problema apenas no seu pc. Se em algum outro lugar a pessoa estiver com o horário adiantado mais de 2 hrs ( fuso horário por exemplo) o ie não vai deixar gravar o cookie pois o mesmo já estará “expirado”, sendo assim a sessão do CI não irá funcionar.

Certo Hugo mas então porque ocorria apenas no IE ?? Se era uma questão de horário no servidor não estariam todos os browsers com o problema ??

E o que mudamos foi o tempo de expiração da sessão…..não me pareceu lógico na época que seria algo com horário do servidor….

Valeu!!!

valeu, eu estava com o mesmo erro

Tivemos esse problema aqui. A solução foi essa: http://www.philsbury.co.uk/blog/code-igniter-sessions

Post a comment