Pergunta

Meu aplicativo está jogando um erro quando a sessão expirar.

Eu não quero as sessões para expirar automaticamente ....

mas se não há nenhuma maneira de fazer isso, então em vez de mostrar o erro deve ser redirecionado para a página de login ...

Eu tentei fazer isso ....

Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) + "; URL=Login.aspx");

este código não funciona quando a sessão expira .. eu recebo uma mensagem de erro

A resposta não está disponível neste contexto.

a configuração web tem esse

<authentication mode="Forms">
        <forms loginUrl="Login.aspx" name="Cookie" timeout="10080" path="/">
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
        <allow users="*"/>
    </authorization>

É mais lá qualquer coisa eu preciso adicionar na web de configuração ...

quaisquer sugestões ... graças

este é o meu carregamento da página

 protected void Page_Load(object sender, EventArgs e)
    {
        Response.AppendHeader("Refresh", Convert.ToString((Session.Timeout * 60) + 10) + "; URL=Login.aspx");
        string userName = Session["userName"].ToString();
        string password = Session["password"].ToString();
        string domain = Session["domain"].ToString();

        impersonateValidUser(userName, domain, password);


    }
Foi útil?

Solução

Eu ter resolvido isso em Page_Load da minha página mestra.

Cada vez que os fogos Page_Load ele verifica que existe um valor específico Session (que deveria estar lá, se um usuário está conectado corretamente). Se não eu redirecionar para a página de login.

Por exemplo:

// Assuming your using master pages (if not you could have this in a base page that all
// your pages inherit from.
protected void Page_Load(object sender, EventArgs e)
{
    if (Session["SomeKey"] == null)
    {
        // Session has expired or person has not signed in so redirect.
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("signin.aspx", true);
    }

    // If all is good continue and do whatever you normally do.
}

No seu exemplo as variáveis ??de sessão pode não existir devido à sessão expirar assim que seu ficando para trás nulo de todas as suas chaves de sessão obtida. Você deve estar validando que não são nulos e se assim reagir adequadamente aos valores sendo nula.

Outras dicas

Eu não tenho certeza de onde suas mentiras de problema, mas como uma alternativa considere o uso de um lado do cliente solução javascript para solicitar ao usuário para renovar sua sessão antes do vencimento. Se o usuário não concordar afirmativamente a renovação sessão, em seguida, redirecionar para o Sair para terminar a sessão sem simplesmente deixá-lo expirar. Normalmente a sua página de logout irá redirecionar de volta para a página de login para que o usuário, quando eles retornam ao seu computador, será solicitado para entrar. Se o usuário faz clique no OK (Eu quero renovar o meu sessão) botão no seu diálogo renovação, em seguida, usar uma solicitação para uma página Keepalive, como @Come sugere, embora eu faria isso com AJAX em vez de um iframe.

Você pode olhar para alguns código de exemplo que faz isso em um contexto ASP.NET MVC no meu blogue .

O que você poderia fazer é adicionar um iframe invisível para sua página:

<iframe src="keepalive.aspx" style="width:0px;height:0px"></iframe>

E keepalive.aspx contém o seguinte:

<%@ Page Language="C#" Inherits="Keepalive" EnableSessionState="True"%>
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" >
<html>
  <head>
   <META http-equiv="refresh" content="60"/>
  </head>
  <body></body>
</html>

A cada 60 segundos keepalive.aspx-se refresca causando a sessão para se manter vivo. Você pode definir o tempo limite da sessão para, por exemplo 2 minutos. Desta forma, a sessão vai ser limpo logo após o usuário ter deixado sua página.

É uma má idéia ter sessões permanentes em seu site, mas você pode acomplish isso, dando grandes valores para o tempo da sessão em web.config

<sessionState  timeout="6000"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top