Objeto session

6 respostas
R

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.

6 Respostas

C

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:

J

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

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

R

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?

J

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

R

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
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() {

	}
}
LogoutAction.java
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"));  
       
    }
}
ListaOpeAction.java
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
        }    
               
    }
    
}

Obrigado!

R

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.

Criado 2 de setembro de 2006
Ultima resposta 6 de set. de 2006
Respostas 6
Participantes 3