Usuário com melhor resposta
Erro timeout

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!!
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
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
-
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