Socorro, login, problema no logout! help-me

16 respostas
rbroz85

Boa tarde senhores…

fiz uma app web, e fiz um login basico… com scopo session no xml

mas quando eu dou log out, ele esta cancelando de todos usuarios que estao conectados !!

como faço um log out pra finalizar somente o dele ?

atualmente meu log out esta assim:

public String doLogout(){ this.id = ""; this.idUf = ""; this.login = ""; this.pword = ""; this.adm = ""; this.nome = ""; this.logado = false; return "mainPage"; }

nao sei o que fazer… nunca implementei isso na vida !! alguem poderia me da um help ??

obrigado

16 Respostas

D

Eu não entendi o log out não deveria ser
session.invalidate();

Leandro_Carvalho

Onde é que vc tá usando esse “this.logado = false;” aí??
Acho que vc tinha que controlar isso com o objeto Session da sua camada de controller…

Jonatas

Se quer aprender programar, acho que um caminho legal é desenvolver um tutorial.
Para cada método, classe, … terá uma explicação.
Estou fazendo assim e estou aprendendo bastante.
1 - aprenda java (sabendo os conceitos de java)
2 - jdbc
3 - programação p/ web: scriptlets, jsp e mvc
4 - framework …
material: apostila da caelum

rmarin

Cara, pra fazer logoff você precisa invalidar a sessão do usuário. Você pode fazer um servlet responsável por efetuar logoffs.

request.getSession().invalidate();

Blz? :thumbup:

rbroz85

Obrigado a todas as respostas… mas acho que eu nao soube me explicar…

eu tenho um validador de login no meu backbean
se o login ok… entao
eu busco todas informaçoes do usuario dentro do obj Usuario…
e crio sessao apartir desse obj… ( como faço isso ) ???

e que eu nunca fiz isso… nunca criei sessao… nem sei fazer isso…
obrigado a todos

rmarin

No seu servlet você tem que fazer alguma coisa assim:

Usuario usuario = new UsuarioBD().procurarPorLogin("aqui vc envia o login", "e aqui a senha"); // aqui você isere o cara na sessão request.getSession().setAttribute("usuario", usuario);

Blz :?:

rbroz85

ahhhhhhhhhh entendiiii !!!

vou tentar aki brow… mt obrigado !!! de coraçao :smiley:

rbroz85

blz eu fiz isso:
theRequest().getSession().setAttribute(“sessionUser”,lo);
funcionou na moral !!!

mas na hora de logout:

public String doLogout(){

theRequest().getSession().invalidate();

return “main”;

}

da esse erro :
SEVERE: Servlet.service() for servlet Blocking Servlet threw exception
javax.faces.FacesException: getAttribute: Session already invalidated

SEVERE: getAttribute: Session already invalidated
java.lang.IllegalStateException: getAttribute: Session already invalidated

que isso ??

rmarin

Você provavelmente está tentando utilizar alguma coisa que está no request depois que você invalidou a sessão.

Depois que você invalidar a sessão, você deve mandar o cara pra um jsp, que seja “pelado”, não tenha nenhum método que utilize request e coisa e tal, afinal a sessão do cara já era :!:

Sacou :?: :thumbup:

rbroz85

ahhhh entendi !!!
saquei sim ! mt obrigado rmarin !

DANKE SCHÖN :smiley: mt obrigado

rbroz85

pow. minha pagina de backbean de login nao faz nenhum getattribute nao !

public String doLogout(){
        theRequest().getSession().removeAttribute("sessionUser");
        theRequest().getSession().invalidate();
        this.login = "";
        this.pword = "";
        return "login";
    }
public String doLogin(){
        boolean noblan = true;
        boolean ok = false;
        String msg = "";
        FacesContext context = FacesContext.getCurrentInstance();
        
        if(login.equals("")||pword.equals("")){
            msg = "Todos campos devem ser preenchidos.";
            noblan = false;
        }   
        if(noblan){
            ok = haveLogin(login,pword);
            if(ok==false){
                msg = "Login ou Senha Invalidos.";
            }
        }          
        FacesMessage message = new FacesMessage(msg);
        context.addMessage("formlogin:errMsg", message);
        
        return (ok ? "main" : "login");
    }

    public boolean haveLogin(String login,String pword){
        boolean ok = false;
        Usuario lo = new ConsultaLogin().haveLogin(login);

        if(lo.getLogin()!=null&&lo.getSenha()!=null)
            if(lo.getLogin().equals(login)&&lo.getSenha().equals(pword))
                ok = true;

       if(ok){
              theRequest().getSession().setAttribute("sessionUser",lo); 
        }
       return ok; 
    }

no meu backbean de login so tem isso !!

nao estou entendendo pq nao ta indo

rmarin

E no jsp que você redireciona depois que executa o doLogout(), o que tem lá?

rbroz85

o formulario que faz login.
que esta ligado nesse meu backbean de login !
nos atributos login e senha !
e o submit chama meu metodo doLogin()

rmarin

rbroz85

Cara, certeza que algum jsp está tentando fazer algum getAttribute, senão não aparecia a mensagem:

javax.faces.FacesException: getAttribute: Session already invalidated

Ah, você está usando jsf? Talvez algum componente faça isso internamente, ou seja, não está explícito no jsp. Verifique isso também.

Faça o teste, redirecione o logoff para uma tela em branco. Se nada ocorrer você matou a charada :!:

Blz? :thumbup:

rbroz85

ahhh sim entendi !
estou usando jsf sim ! (icefaces)

vou tentar redirecionar para o index.jsp que nela tem um

redired para a pagina de login !

ps: eu matei nada rsrs voce uqem matou a charada ! rsrs
abraço brow ! vou ver aki…
obrigadao !

rbroz85

entendi ! mas mesmo eu redirecionando pra uma pagina em branco… nao funciona !

public String doLogout(){ theRequest().getSession().removeAttribute("sessionUser"); // theRequest().getSession().invalidate(); this.login = ""; this.pword = ""; return "index"; }

pois quando voce invalida a sessao ! eu ainda estou na aplicação ! tem o return “index” que deve ter alguma coisa la pra interpretar e ir no web.xml e redirecionar pra pagina q eu quero… seila…

se eu deixar somente o removeAttribute… tem problema ??

Criado 19 de setembro de 2007
Ultima resposta 20 de set. de 2007
Respostas 16
Participantes 5