none
Erro timeout RRS feed

  • Pergunta

  • Tenho uma aplicação web que está com o timeout configurado em 15 minutos. Porém, quando o usuário executa alguma operação depois dos 15 minutos, o sistema apresenta uma tela de erro. Gostaria de saber como eu faço pra capturar este erro e exibir uma mensagem de "Sua sessão foi expirada"?

    Obrigado.

    Valeu!!

    quarta-feira, 15 de agosto de 2012 13:02

Respostas

  • Tucão uma prática comum é redirecionar o usuário para a página de Login novamente, nesse caso você iria trabalhar um pouco com Autenticação/Autorização, você pode ver alguns exemplos:

    http://www.macoratti.net/10/08/aspn_aut1.htm

    http://www.asp.net/web-forms/tutorials/security/membership/user-based-authorization-cs

    e você pode redirecionar o usuário não autorizado para uma página customizada:

    http://weblogs.asp.net/gurusarkar/archive/2010/01/12/redirect-unauthorized-users-to-access-denied-page-instead-of-login-page.aspx


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta rafaeljardim1403 quarta-feira, 15 de agosto de 2012 18:57
    quarta-feira, 15 de agosto de 2012 13:37

Todas as Respostas

  • Tucão uma prática comum é redirecionar o usuário para a página de Login novamente, nesse caso você iria trabalhar um pouco com Autenticação/Autorização, você pode ver alguns exemplos:

    http://www.macoratti.net/10/08/aspn_aut1.htm

    http://www.asp.net/web-forms/tutorials/security/membership/user-based-authorization-cs

    e você pode redirecionar o usuário não autorizado para uma página customizada:

    http://weblogs.asp.net/gurusarkar/archive/2010/01/12/redirect-unauthorized-users-to-access-denied-page-instead-of-login-page.aspx


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS

    • Marcado como Resposta rafaeljardim1403 quarta-feira, 15 de agosto de 2012 18:57
    quarta-feira, 15 de agosto de 2012 13:37
  • Pode fazer isso aqui:

    Code-behind(C#)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    namespace JQTest
    {
        public partial class SessionExpire : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    //Cria sessão
                    Session["minhaSessao"] = 45;
                }
            }
            protected void Button1_Click(object sender, EventArgs e)
            {
                if (Session != null
                    && Session.IsNewSession
                    && Request.Cookies["ASP.NET_SessionId"] != null
                    && Request.Cookies["ASP.NET_SessionId"].Value != "")
                {
                    Session.Clear();
                    Response.Redirect("SessaoExpirou.htm");
                }
                int soma = 10 + (int)Session["minhaSessao"];
                txtSoma.Text = soma.ToString();
            }
        }
    }

    Ao entrar na página a Sessão é criado com um número(45), ao clicar no botão "Executar Operação" uma soma é realizada a partir deste número que está na sessão. Caso a sessão tenha expirado essa soma irá disparar uma exceção, para evitar isso coloquei o teste do IF "Session != null" para direcionar para uma tela de aviso. O ideal é que este IF esteja em sua master page.

    ASPX

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SessionExpire.aspx.cs" Inherits="JQTest.SessionExpire"  %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="txtSoma" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="Button1" runat="server" Text="Executar Operação" onclick="Button1_Click" />
        </div>
        </form>
    </body>
    </html>

    Adicione ao web.config a tag abaixo(dentro do <system.web>:

    <sessionState timeout="1"></sessionState>

    O parâmetro timeout="1" informa que a sessão irá expirar após 1 minuto, coloquei o tempo pequeno para pdoer testar, o padrão acho que é 20min.

    Criei também uma página SessaoExpirou.htm, para a qual o usuário será redirecionado quando a sessão expirar. Veja o resultado:

    Clique com a Sessão normal.

    Clique após a sessão expirar


    Rodrigo Reis Ferreira
    Microsoft Certified

    quinta-feira, 16 de agosto de 2012 13:04