Olá galera,
Há algum tempo, precisei destruir a sessão mais antiga de um usuário caso ele efetuasse login em outra máquina ou em outro navegador. Dessa forma, queria garantir que teríamos o mesmo usuário logado somente uma única vez com a sessão mais nova.
Fiz uma implementação que acredito não ser a melhor solução mas resolveu o meu problema. Vale lembrar que a solução foi utilizando o Session Driver do tipo file.
O código abaixo foi utilizado no controller de usuário após validação dos dados de login onde foi retornado o id do usuário.
$files = \File::allFiles(storage_path().'/sessions'); $name = Auth::getName(); foreach ($files as $file) { $session = unserialize(\File::get($file)); if(isset($session[$name])) { if($session[$name] == $usuario_id) { \File::delete($file); } } }
Na linha 1, são acessados todos os arquivos de sessão gerados na aplicação.
Na linha 2, é capturado o valor do identificador único da sessão.
Nas linhas 4 e 5, são capturados o conteúdo de cada arquivo da sessão e convertido para dados serializados para o formato de array.
Na linha 6, é realizada uma checagem para ver se existe algum usuário logado com aquele identificador único.
Na linha 7, é feita uma comparação entre o id do usuário retornado na consulta do login com o id da sessão já armazenada no file.
Na linha 8, é apagado o arquivo da sessão mais antiga que se encontra armazenado no diretório sessions.
OBS: Com a remoção do arquivo gerado na sessão é necessário realizar a checagem com Auth::check() e fazer o redirecionamento caso a sessão do usuário não exista mais.
Conhece outra solução ou fez de outra forma? Compartilhe conosco.
Um grande abraço a todos e até a próxima.
Nenhum comentário:
Postar um comentário