Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

5. Mantendo informações relativas ao usuário com cookies -> Usuário não desloga quando fecho o navegador

Olá!

No exemplo dessa aula, quando logo com um usuário, fecho o navegador e abro o navegador novamente o usuário que tinha sido logado não é deslogado automaticamente e continua aparecendo como logado no console.

Alguém tem uma ideia do porquê o usuário não estar sendo deslogado quando fecho o navegador?

Estou usando o chrome.

Meu código abaixo:

@WebServlet(urlPatterns = "/login")
public class Login extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String email = req.getParameter("email");
        String senha = req.getParameter("senha");

        Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha);

        PrintWriter writer = resp.getWriter();

        if(usuario == null) {
            writer.println("<html><body>Usuario nao encontrado</body></html>");
        }
        else {
            Cookie cookie = new Cookie("usuario.logado", usuario.getEmail());

            resp.addCookie(cookie);

            writer.println("<html><body>Usuario logado: " + usuario.getEmail() + "</body></html>");
        }
    }
}

@WebFilter(urlPatterns = "/*")
public class FiltroDeAuditoria implements Filter{

    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;

        String uri = req.getRequestURI();

        String usuario = getUsuario(req);

        System.out.println("Usuario: " + usuario + " acessando a URI" + uri);    

        chain.doFilter(request, response);
    }

    private String getUsuario(HttpServletRequest req) {

        String usuario = "<deslogado>";

        Cookie[] cookies = req.getCookies();

        if(cookies == null)
            return usuario;

        for(Cookie cookie : cookies) {

            if(cookie.getName().equals("usuario.logado")) {                
                usuario = cookie.getValue();                
            }
        }
        return usuario;        
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {}
}
6 respostas

Oi Thiago,

tem como fazer um teste para mim?

Adicione um parâmetro ao cookie:

cookie.setMaxAge(-1);

Isso deve garantir que o cookie morre quando o navegador for fechado.

Docu: https://tomcat.apache.org/tomcat-8.0-doc/servletapi/javax/servlet/http/Cookie.html#setMaxAge(int)

abs

Coloquei essa linha logo após a criação do cookie, mas não funcionou. Mesmo fechando o navegador e reiniciando o server quando abro novamente o navegador ele já vem com o usuário logado.

Oi Tiago, tem como testar isso com um outro navegador? para ver se é algo especifico do navegador.

abs

No firefox desloca direitinho quando o fecho. Parece que é algo específico do chrome mesmo.

solução!

Tiago, isso pode ser uma configuração do Chrome.

Abra o Chrome > Configurações e na parte Inicialização veja se não está marcada a opção Continuar de onde você parou. Se estiver, mude para abrir a página Nova Guia.

Estava na opção "Abre uma página específica ou um conjunto de páginas" e mudei para "Nova Guia". Realmente funcionou! Obrigado.