Pergunta

Usei a funcionalidade lembrar de mim em meu site usando o seguinte pacote: http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/.Está funcionando bem.Mas enfrento um problema: um usuário excluído pode acessar contas apenas porque permanece conectado.

O cenário é o seguinte:

  1. Login do usuário após configuração manter-me conectado.
  2. Ele deixou o sistema desligado sem sair.
  3. Sua conta foi excluída naquele dia à noite.
  4. Ele visita o local na manhã do dia seguinte.

Como ele havia definido para permanecer conectado, ele obtém sua sessão e pode postar uma história e fazer o que quiser em sua conta sem saber que sua conta foi excluída no dia anterior.Além disso, configurei a lembrança por 14 dias.

Alguma idéia de como resolver esse problema?

Obrigado

Foi útil?

Solução

Estender o tempo de expiração da sessão por mais de algumas horas é uma má ideia por vários motivos, não apenas porque você está mantendo sessões de usuários excluídos.Há também problemas de desempenho e segurança relacionados ao fato de você manter uma sessão ativa (com session_id) em seu banco de dados/armazenamento de sessão.

Ver login persistente com Zend_Session::rememberMe.

Em qualquer caso, você deve revalidar sua conta de usuário a cada carregamento de página, para garantir que seu usuário ainda exista e esteja ativo:

Criei uma função de revalidar que chamo a cada carregamento de página.A função é chamada a partir da função init() do controlador antes que o usuário possa fazer qualquer coisa.

 public static function revalidate() {
        $userData = self::getIdentity();

        $modelUsers = new \Model_Users();
        $user = $modelUsers->fetchWithEmail($userData['email']);

        if ($user instanceof \Model_User) {
            if ($user->getRoleType() == 'ACCOUNT') {
                return $user;
            }
        }
        return false;
    }

Outras dicas

.

Como ele colocou a estadia assinada, ele recebe sua sessão e ele poderia postar uma história e fazer o que sempre em sua conta sem saber o fato de que sua conta foi excluída no dia anterior.

Quando você excluir o usuário, você deve excluir toda a (s) sessão (s) do usuário.

Na tabela de sessões no banco de dados, use uma chave estrangeira para a tabela Usuários com em excluir cascata.Ou você pode fazer uma participação na tabela do usuário ao buscar a sessão.

Quando o usuário deixa seu computador e volta ao seu site no dia seguinte, sua sessão expirou há muito tempo.Neste ponto, se você está permitindo que ele acesse seu site, é porque ele optou por ser lembrado, o que você faz colocando cookies no computador.

Quando você autenticar um usuário com base em cookies, você deve Verifique os valores de cookie em um banco de dados. Não, apenas, verifique a existência de um cookie .

Isso corrigirá seu problema.Além disso, ele conectará um grande buraco de segurança onde uma pessoa maliciosa pode simplesmente criar cookies em seu computador e usá-los para ser autenticado seu site.

.

Só você só pode verificar o que você verifica.No momento em que a sessão acabou e O usuário excluído e o procedimento de login persistente chuta para Mantendo o usuário logado, ele precisa verificar que o usuário ainda existe. - Hakre

Como Hakre disse que eu acho que você deve verificar o usuário toda vez que ele tentar alterar as configurações ou fazer algo como enviar nova postagem ou postar novo comentário etc vamos tentar

Isto é exatamente por que você precisa configurar um tempo limite de sessão para cada aplicativo/página.

Usar ini_set(), para o tempo de vida da sessão

ini_set("session.cookie_lifetime","1800"); //half an hour

Em seguida, verifique se uma sessão está ativa em todas as páginas seguras, como

if (!empty(session_id())) {
    header("Location: index.php"); //GO to home page
    exit;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top