Pergunta

Eu estou usando função de login no meu site com sessão. Esta sessão da mina fica expirou depois de alguns minutos, independentemente do usuário tiver feito ou não. Agora o que eu quero é que a sessão só deve começar expirado quando um usuário fizer fora. Se um usuário não log out de sua conta e depois volta após 2-3 dias, mesmo assim ele deve aparecer logado.

Eu encontrei alguns exemplos onde eles têm aumentado o tempo para uma sessão para expirar, mas eu quero que ele só deve expirar na trave evento pelo usuário, independentemente do tempo que ele levou para terminar a sessão.

Como posso fazer isso?

Em particular, este é o caminho certo para fazê-lo?

session_cache_expire(0);
session_start();
Foi útil?

Solução

Uma solução que é frequentemente utilizado, nesta situação, é a seguinte:

  • tem uma duração de sessão não muito longa: ele irá expirar se o usuário não está ativa (isso é apenas a forma como ele funciona - e isso é melhor para o seu servidor se você tiver muitos usuários)
  • quando o usuário fizer login, você define um cookie que contém o que é necessário para ele ser reconhecido
  • se ele voltar no site (com o cookie, e sem ter uma sessão ativa), você usa as informações contidas nesse cookie para auto-log-lo entrar, re-criar a sessão, ao mesmo tempo.

Desta forma:

  • você não tem milhares de sessões de "ativos" sem uma boa razão
  • você mantenha o padrão sessões forma como o trabalho

E você tem a vantagem de "não ser desconectado", pelo menos do ponto de vista do usuário.

Observe também que com sessões de "normais", o cookie contendo a identificação da sessão serão excluídas quando o usuário fecha seu navegador - assim, ele será desligado, não importa quanto tempo a vida do sessão.
Com a solução que proponho, você é o único que define quanto tempo o cookie deve permanecer no computador do utilizador; -)


Isso significa, porém, que quando um usuário faz-out manualmente, você tem que eliminar tanto a sua sessão eo cookie, é claro -. Então ele não é imediatamente re-auto-logged-in


Claro, você tem que ter cuidado sobre o que você definir no cookie: um cookie não é muito segura, por isso não armazenar uma senha nele, por exemplo; -)


Na verdade, esta maneira de fazer as coisas é como o "Remember Me" recurso muitas vezes funciona; Exceto, aqui, os usuários não tem que verificar a caixa de seleção para ativar "lembrar de mim"; -)


Se você não tem o tempo para desenvolver esse tipo de coisa, uma maneira muito rápida e suja é usar algum pedido Ajax em todas as suas páginas, que só vai "ping" uma página PHP no servidor - o que irá manter o sessão ativa (mas não é bem uma boa maneira de fazer as coisas: você ainda terá muitas sessões no servidor, você terá muitas solicitações inúteis ... e só irá funcionar, desde que o usuário não fechar seu navegador).

Outras dicas

Você não pode fazer isso com a manipulação da sessão interna PHP sozinho. PHP sempre envia o ID da sessão em uma sessão de cookie, que expira quando o usuário fecha seu navegador. Para alcançar algum tipo de auto-login você vai precisar de algum código que acompanha que define um cookie mais duradoura no navegador e alças do usuário o reconhecimento destes cookies e o mapeamento entre o valor biscoitos e da respectiva conta de utilizador.

Por favor, note que esta afecta grandemente questões de segurança, assim você vai ter que cuidar de um monte de coisas. Por favor, leia o seguinte sobre como um possível recurso de auto-login poderia estar trabalhando:

Você remover seus cookies durante o teste? São os cookies ativados? Você destory a algum lugar sessão no seu código?

Além disso, veja a minha resposta para outro post: Pergunta rápida sobre sessões em PHP que explica como se manter conectado. Só não faça a / tarefa sheduled cronjob se você deseja que o usuário para permanecer ligado para sempre.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top