CodeIgniter, Internet Explorer e o tempo de expiração da sessão
January 17th, 2009 | Published in Browsers, CodeIgniter, Php | 10 Comments
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 !!!
January 17th, 2009 at 11:38 (#)
Maldito IE, sempre atrasando nossos sites. haha.
Deu trabalho mais com certeza esse post vai ajudar varias pessoas.
Muito bom o post!
January 20th, 2009 at 05:08 (#)
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+!
January 21st, 2009 at 07:14 (#)
“Navegando pelo segundo cérebro não tive nenhuma resposta conclusiva.”
O que é “segundo cérebro”?
Obrigado
January 21st, 2009 at 07:17 (#)
Sempre cito o segundo cérebro nos meus posts, foi uma falha não ter linkado nesse….
Segundo cérebro é o Google..
Abraço !!
January 26th, 2009 at 06:28 (#)
Tá valendo, nunca tive essa problema, porém… vamo ve ne !
Ei, a session nativa do CI é cookie?
February 18th, 2009 at 11:31 (#)
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!
February 18th, 2009 at 16:59 (#)
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…
July 15th, 2009 at 10:50 (#)
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
January 1st, 2010 at 10:54 (#)
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.
January 1st, 2010 at 18:45 (#)
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!!!