Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.
Estou tendo um problema muito estranho, com sessões do PHP. Eu defini para que elas expirassem somente no fechamento do navegador, ou seja, não quero que expire por inatividade. Mesmo assim, certos usuários do meu site parecem não ter a sessão inicializada, ou ela está expirando (não era para ocorrer, se for isso).
Vejam o meu código (index.php)
ob_start();
ini_set("session.use_trans_sid",false); //forçar o uso de sessões apenas por cookies, segundo a minha interpretação do manual do php
ini_set("session.use_only_cookies",true); //forçar o uso de sessões apenas por cookies, segundo a minha interpretação do manual do php
session_set_cookie_params(0); //nunca expirar, segundo o manual do php
session_start();
$_SESSION["authentication"] = "meu hash fixo";
A página que o problema tem ocorrido:
ob_start();
ini_set("session.use_trans_sid",false);
ini_set("session.use_only_cookies",true);
session_set_cookie_params(0);
session_start();
if($_SESSION['authentication'] !== "meu hash fixo"):
// nao era pra vir aqui!! :(
endif;
Se o usuário não tiver sessão com o hash fixo ele cai naquela parte, isso não pode ocorrer, porque para o usuário chegar nesta página ele é obrigado a passar pela anterior.
A única hipótese é alguém acessando esta página diretamente, mas muitos usuários estão vindo para cá sem a sessão iniciada, ou seja, segundo os meus logs, a sessão está vazia mesmo
Help me?
Além do sessionid, as outras sessões criadas também são enviadas somente por cookies?
Eu testei isto, e as sessões criadas após expiravam exatamente em 10 segundos:
session_set_cookie_params(10); //10 segundos para expirar
Testando desta forma, tenho tido os mesmos problemas
ob_start();
session_start();
Já tentei com a função session_cache_expire também.. o mesmo problema.
Enfim, 85% dos meus usuários tem a sessão em tempo indefinido normalmente, 15% por motivos desconhecidos nem recebem a sessão, ou está expirando..
Infelizmente, eu não posso testar .. :D estou sem PHP aqui, afinal .. nem com o meu pc de trabalho eu estou, mas cara .. isso é muito estranho .. retira esse "session_set_cookie_params" , e deixe que expire naturalmente .. não serve não !?
Tudo bem, mas é que eu não posso deixar a sessão expirar nunca. Na verdade eu nem sei se é esse o problema, pois nos meus logs eu vejo usuários sem a sessão, ou seja, em branco. Ou a sessão não foi inicializada por alguma incompatibilidade (não sei explicar como) ou ela expiro.
E como eu falei, a grande maioria dos meus usuários não tem esse problema, e todos tem o mesmo privilégio no sistema, ou seja, são iguais.
Cara, então utilize cookies .. sessão é sessão.
Eu ja pensei neste hipotese, mas nao posso utilizar, pela parte de segurança mesmo. Eu teria que gravar o meu hash no cookie, qualquer usuário poderia ver qual é o hash e ficar logando sem passar pelo meu site, setando o cookie com cURL...
mesmo problema que o meu, também nao resolvido -> http://forum.imasters.com.br/topic/107668-tempo-de-expiracao-de-session/
:upset:
Infelizmente o problema ainda está sem solução galera, gostaria de saber se alguém já passou por algo similar, de alguns poucos usuários do seu site não receberem a sessão corretamente...
Obrigado :upset:
O problema é isso aqui, afinal .. a sessionid já é feita por cookies, não é necessário utilizar nenhum desses ini_set ..
session_set_cookie_params(0); //nunca expirar, segundo o manual do php
Está totalmente errado
:seta: http://php.net/manual/pt_BR/function.session-set-cookie-params.php
>
session_set_cookie_params — Define os parâmetros do cookie de sessão