Digamos que o nome da tabela de banco de dados para o cookie persistente seja pcookies com as seguintes colunas:
- cookie_id (CHAR)
- user_id (INT)
- expiração (DATETIME)
- sal (CHAR)
Etapas de criação de cookies:
- Após o login bem-sucedido, crie um registro de cookie no banco de dados com um ID exclusivo. Você pode gerá-lo por hash_hmac('sha512', $token, $salt) onde $token=uniqid($user_id, TRUE) e $salt=md5(mt_rand()).
- Armazene 'id do usuário', 'tempo de expiração' e 'sal' junto com o 'id do cookie' no banco de dados.
- Armazene 'id do cookie' e 'token' no cookie.
Etapas de autenticação:
- Se for encontrado um cookie persistente, primeiro verifique se o registro está disponível no banco de dados ou não.
- Se o registro estiver disponível, verifique se o cookie expira ou não.
- Se o cookie não expirar, valide o ID do cookie por $cookie_id ==hash_hmac('sha512',$token_from_cookie,$salt_from_db).
- Depois que o cookie for validado, exclua-o do banco de dados e crie um novo cookie de acordo com as etapas de criação de cookies acima.
- Se o cookie for considerado inválido, limpe o cookie do dispositivo e exclua todos os outros registros de cookies do usuário do banco de dados, observe o uso sobre uma tentativa de roubo e prossiga para o processo de login manual.
Observações:
- Quando a sessão estiver disponível, ignore a verificação do cookie.
- Após o logout, limpe o cookie junto com o registro do banco de dados.
- Nunca permita que os usuários executem solicitações confidenciais, como alteração de senha ou visualizem informações de cartão de crédito de um login de cookie persistente. Invoque a senha para fazer login e adicione um sinalizador na sessão para permitir todas as operações posteriores.