Objeto session

Olá galera…

Estou começando a utilizar o objeto session na minha aplicação.

Ao usar o metodo invalidate() redireciono para pagina index… mas gostaria de desbilitar o botão “voltar” do browser para não ficar dando erro 500 se a pessoa tentar clicar…

A e outra duvida… usei esse codigo para verificar em quaqnto tempo a sessão expira 30 minutos… como faço pra mudar esse valor? tipo pra 10 minutos por exemplo?

Grato…

Rodrigo.

Olá rdo_marini,

Com relação à primeira dúvida, não é possível desabilitar o botão do navegador do usuário. O que você pode fazer é fazer um tratamento na página da sessão, ao invés de deixar dar um erro 500 quando o cara voltar.

E sobre a segunda dúvida, tem o método setMaxInactiveInterval (em segundos), dê uma olhada nele.

Até mais, :wink:

Pra alterar o tempo da sessão coloque isso no web.xml:

<session-config> <session-timeout>10</session-timeout> </session-config>

Beleza… consegui alterar o tempo da sessão… mas ainda não resolvi o problema de clicar no botão voltar do browser apos a sessão ter sido encerrada…

Alguem tem algum exemplinho ou pode me explicar oque fazer para que quando o usuario fizer isso e a sessão tiver sido encerrada ele redirecione para a propria pag de login?

Faça uma verificação pra ver se o usuario está logado, se não estiver redireciona ele pra pagina de login…

Tem um exemplo de login com filtros aí:

http://www.devmedia.com.br/visualizacomponente.aspx?comp=1720

Oi Jair…
Dei uma olhada no seu tutorial sobre filter e achei perfeito porem tenho uma dificuldade:

Se tentar executar uma servlet (listaOpeAction) após efetuar a servlet logout, que contem session.invalidate(); o programa redireciona para pagina de login graças a implementação da classe FiltroSeguranca implements Filter.Porem se esse servlet (listaOpeAction) foi acessado durante a sessão, ele é acessado tranquilamente via URL (/cad_Ope.do) mesmo após efetuar logout.O mesmo acontece com qualquer outro servlet declaradano web.xml… A impressão que tenho é que a classe FiltroSeguranca não é acessada neste momento pois
nenhum dos System.out.println são exibidos (esses que estão dentro do if/else) Oque pode ser isso?

Configuração no web.xml

	<filter>
		<filter-name>Filtro Seguranca</filter-name>
		<filter-class>com.myapp.struts.filter.FiltroSeguranca</filter-class>
	</filter>
	
        
        <filter-mapping>
		<filter-name>Filtro Seguranca</filter-name>
		<url-pattern>/cad_ope.do</url-pattern>                  
	</filter-mapping>

	<filter-mapping>
		<filter-name>Filtro Seguranca</filter-name>
		<url-pattern>/conc_caixa.do</url-pattern>                  
	</filter-mapping>

FiltroSeguranca.java[code]public class FiltroSeguranca implements Filter {

public void init(FilterConfig config) throws ServletException {

}
    
    //é verificada a existência do atribute “idUser” na sessão
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
        
	HttpSession session = ((HttpServletRequest)req).getSession(); 
            
	String idUser = (String)session.getAttribute("Id");
	if(idUser==null){ 
                
		System.out.println("Você não está logado no sistema!");
                    
		((HttpServletResponse)res).sendRedirect("/StrutsFinanceiro");
                    
	}else{ //caso exista é porque o usuário está logado
		chain.doFilter(req, res); 
                    System.out.println("Logado seu ID "+idUser);
	}
}

public void destroy() {

}

}[/code]
LogoutAction.java[code]
public class LogoutAction extends Action {

public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response)
    throws Exception {
    HttpSession session = request.getSession();      
                 
          session.removeAttribute("Id"); 
          
          session.invalidate();              
             
          return (mapping.findForward("success"));  
   
}

}
[/code]ListaOpeAction.java[code]public class listaOpeAction extends Action {

public ActionForward execute(ActionMapping mapping,
             ActionForm form,
             HttpServletRequest request,
             HttpServletResponse response)
throws Exception {
    
    LinkedList despesas = null;
    LinkedList receitas = null;
    ActionErrors errors = new ActionErrors();
    
    try {
        
        OpeDAO opeDAO = new OpeDAO(); //instancia classe OpeDAO (select * ...)
        
        HttpSession session = request.getSession(); //carrega o objeto da sessão 
                    
        String idUser = (String)session.getAttribute("Id"); // para recuperarmos o Id do user em questão da sessão em formato String!!  
        
        int id = Integer.parseInt(idUser); //convertendo o ID de Strng para inteiro           
                   
        despesas = opeDAO.listaDespesas(id); //passa id recuperado e convertido em int para acionar o met que retorna lista de despesas do id correspondente
        receitas = opeDAO.listaReceitas(id);          
                               
       
        
        session.setAttribute("listaDespesas", despesas); // nome variavel que sera chamado na JSP, nome variavel que contem o parametro
        session.setAttribute("listaReceitas", receitas); // nome variavel que sera chamado na JSP, nome variavel que contem o parametro                        
        
    }
    
    catch (SQLException e) {
        
                    
        errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.ope.lista"));
        
        
    }
    
    
    
    if (!errors.isEmpty()) {
        saveErrors(request, errors);
        return (mapping.findForward("failure")); //pag de erro
    }
    else {
        return (mapping.findForward("lista")); //pag que lista operações
    }    
           
}

}[/code]

Obrigado!

Descobri>>>

Na verdade ela estva armazenando a servlet em cache…
Resolvi isso com esse pequeno trecho de codigo adcionado
ao meu servlet: response.setHeader("Cache- Control", "no- cache, must- revalidate"); //Tratamento da servlet caso houver cacheamento response.setHeader("Pragma","no- cache");//Tratamento da servlet caso houver cacheamento response.setHeader("Expires","Mon, 04 Sep 2006 05:00:00 GMT"); //data da expiração response.setDateHeader("Last- Modified",System.currentTimeMillis()); //data da ultima modificação

Obrigado.