Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

antoniomilat

Como aumentar a duração de uma sessão?

Recommended Posts

Olá.

 

Estou com problema para aumentar o tempo de sessão. Como não tenho acesso ao arquivo php.ini, tenho que configurar na própria aplicação.

 

O session.gc_maxlifetime está configurado para 1440 segundos (24 minutos), o que é muito pouco, pois preciso de pelo menos 3 horas de sessão. Usei o comando "ini_set('session.gc_maxlifetime', 10800);", mas não obtive sucesso.

 

Após pesquisar, descobri que preciso utilizar a função session_save_path(); para salvar a sessão em outra pasta, senão ele ainda iria considerar a configuração padrão (1440 segundos);

 

Criei uma pasta chamada 'session' dentro da pasta dos meus arquivos 'httpdocs' e utilizei o código:

<?php
   ini_set('session.save_path', '/session');
   ini_set('session.gc_maxlifetime', 10800);
   session_start();
...

Mas apareceu a mensagem:
"Warning: session_start() [function.session-start]: open(/session/sess_6kj5o55aejqvvos5e07nvarf95, O_RDWR) failed: No such file or directory (2)"

Confesso que estou há dias tentando encontrar a solução, mas nada do que encontrei na internet e até mesmo no manual do php funcionou. Já tentei alterar session.cache_limiter, session.cache_expire, session.gc_probability, session.gc_divisor...

Se alguém puder me dar uma luz, uma direção, enfim, qualquer coisa, eu ficarei muito grato. Sou novato em php e este é o primeiro problema em que não encontrei a solução pesquisando.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É bem simples e bem básica a solução desse problema. /session não existe do "ponto de vista" da Aplicação.

 

Assumindo que esteja em ambiente Windows, normalmente, ao definir "barra qualquer coisa" estamos apontando para a raiz do disco (C:).

 

Mas a Aplicação não roda a partir daí. Experimente usar ./ (ponto barra) para "mover" a referência de C: para o diretório em que o arquivo em questão esteja.

 

Ou então, use getcwd() seguido de DIRECTORY_SEPARATOR

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, Bruno Augusto.

 

Segui sua dica colocando o './' e funcionou.

Então apareceu a mensagem: "Warning Permission denied (13) on session_start...". Pesquisei e encontrei a solução (caso alguém aqui tenha o mesmo problema, é só selecionar a pasta que você indicou com o botão direito > propriedades e configurar a permissão da pasta com o valor '0777').

 

Agora estou conseguindo salvar minha sessão em uma pasta diferente da padrão, mas não estou conseguindo recuperar a sessão em outras páginas, mesmo indicando nas outras páginas o caminho que está a sessão aparece a mensagem "undefined index" quando tento recuperar a sessão (não me esqueci do session_start()).

 

Se alguém souber o motivo ou tiver alguma ideia do que possa estar acontecendo...

Vou continuar pesquisando. Se eu encontrar a solução eu posto aqui para quem tiver o mesmo problema futuramente.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está lembrando de modificar a diretiva também nos arquivos que vão acessar as informações de sessão? Se não fizer isso onde acha que os dados serão buscados? Lá na diretiva padrão.

 

Mas vem cá. Pra quê isso tudo? Qual a real necessidade de mudar o local onde os dados de sessão ficarão armazenados? Não entendo muito de segurança de servidores mas é de se imaginar que se você fizer isso e invadirem teu site, "já era" porque além do source terão dados de sessão à mão.

 

Eu nunca abri um arquivo de sessão pra ver, nem de curiosidade, mas e se lá ficarem informações sesníveis? Que confiança que o seu cliente/visitante vai ter?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Bruno.

Eu mudei a diretiva nos arquivos que vão acessar a sessão, sim.

 

Também estou me perguntando o por quê de tudo isso, alterar o tempo de uma sessão deve ser algo comum no dia a dia dos programadores php, mas como sou novato estou batendo a cabeça nisso.

 

O caminho pra chegar no ponto de querer alterar a pasta das sessões foi a seguinte (espero que as informações que encontrei estão corretas):

 

-Precisei alterar tempo de sessão;
-Pesquisei e no php.net diz que as funções que alteram o tempo da sessão são session.cache_limiter() e session.cache_expire();

-Testei e não funcionou;

-Pesquisei novamente e descobri que existe o tal do garbage colector, que está configurado para 24 minutos e limpa minha sessão independente do tempo que está setado no session.cache_expire();

-No php.net diz que posso configurar o tempo deste garbage colector usando a função session.gc_maxlifetime();

-Testei e também não funcionou, vamos a mais uma pesquisa;

-Descobri que se a sessão estiver na pasta padrão, ela iria considerar o valor do garbage colector padrão (o que não faz muito sentido pra mim, mas a essa altura já estou tentando qualquer coisa);

-E aí surgiu minha necessidade de gravar a sessão em outra pasta utilizando o session.save_path();

 

Essa alteração de tempo de sessão faz parte de uma melhoria de um sistema que já está em funcionamento, então não tenho prazo para entregar.
Eu quero começar do zero e esquecer tudo o que eu vi sobre como aumentar o tempo da sessão.

Você poderia me indicar o caminho a seguir?
Não quero apenas copiar um código e fazer funcionar... quero aprender de fato, então se você souber de algum material (apostila, video-aula, função pra pesquisar sobre, etc) me mande por favor.

 

Muito obrigado pela sua atenção até aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então faz assim. Quando a sessão for criada você grava junto o timestamp, na própria sessão, em outro índice.

 

E antes de usar os dados de sessão, você lê esse valor do timestamp e compara com algum valor limite. Se validar, você força o logout.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente Bruno Augusto.

 

Eu descobri o meu problema. O servidor está configurado para bloquear alteração de variáveis via aplicação por questões de segurança. As funções que eu tinha utilizado (session.cache_expire, session.cookie_lifetime, session.gc_maxlifetime e session.cache_limiter) deveriam ter funcionado.

 

Obrigado pela sua atenção e ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.