DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 899918 - Última revisão: sexta-feira, 8 de setembro de 2006 - Revisão: 1.3

 

INTRODUÇÃO

Este artigo descreve como e por que as identificações de sessão de Microsoft ASP.NET são usadas.

Mais Informações

O estado da sessão ASP.NET é uma tecnologia que permite que você armazene dados do lado do servidor, específicas do usuário. Aplicativos da Web podem usar esses dados para processar solicitações do usuário para o qual o estado da sessão foi instanciado. Um usuário de estado de sessão é identificado por uma identificação de sessão. A identificação da sessão é entregue usando um dos seguintes métodos:
  • A identificação da sessão é parte de um cookie é enviado para o navegador do usuário.
  • A identificação da sessão é incorporada no URL. Essa técnica também é conhecido como uma sessão sem cookies .
As identificações de sessão são um número aleatório 120 bits que é representado por uma seqüência de 20 caracteres. A seqüência de caracteres é formatada de forma que podem ser incluído em uma URL e ele não tem sofrer a codificação de URL. Por exemplo, a seqüência de caracteres pode ser usada nas sessões sem cookies. O método mais comumente usado de fornecimento de identificações de sessão é usando cookies para armazenar identificações de sessão.

Quando um usuário abre pela primeira vez seu navegador da Web e, em seguida, vai para um site que implementa o estado da sessão ASP.NET, um cookie é enviado para o navegador com o nome "ASP.NET_SessionId" e um valor de 20 caracteres.

Quando o usuário navega dentro do mesmo domínio DNS, o navegador da Web continua a enviar esse cookie para o domínio para o qual ele foi originado.

Por exemplo, app1.tailspintoys.com e app2.tailspintoys.com são ambos os aplicativos ASP.NET. Se o usuário vai para app1.tailspintoys.com e, em seguida, vai para app2.tailspintoys.com, ambos os aplicativos usaria o mesmo cookie e a mesma identificação de sessão para controlar o estado da sessão do usuário dentro de cada aplicativo. Os aplicativos não compartilham o mesmo estado da sessão. Os aplicativos compartilham somente a identificação de sessão.

Portanto, você pode reutilizar identificações de sessão por vários motivos. Por exemplo, se você reutilizar identificações de sessão, não é necessário que fazer o seguinte:
  • Criar um nova ID de sessão exclusiva criptograficamente quando são apresentados com uma identificação de sessão válido.
  • Crie uma identificação de nova sessão para cada aplicativo ASP.NET que está em um único domínio.
Quando o aplicativo da Web requer um logon e oferece uma página ou opção logoff, recomendamos que você desmarcar o estado da sessão quando o usuário fez logoff o site. Para limpar o estado da sessão, chame o método Session.Abandon . O método Session.Abandon permite que você liberar o estado da sessão sem aguardar o tempo limite estado de sessão. Por padrão, esse tempo limite é uma expiração sliding de 20 minutos. Este expiração é atualizada toda vez que o usuário faz uma solicitação para o site da Web e apresenta o cookie de identificação de sessão. O método abandonar define um sinalizador no objeto de estado de sessão que indica que o estado da sessão deve ser abandonado. O sinalizador é examinado e tratado no final da solicitação de página. Portanto, o usuário pode usar objetos de sessão dentro da página depois que você chamar o método abandonar . Assim que o processamento da página é concluído, a sessão é removida.

Quando você usa o modo de estado de sessão em processo, esses objetos de estado de sessão são armazenados no HttpCache. O HttpCache suporta um método de retorno de chamada quando as seguintes condições forem verdadeiras:
  • Uma entrada de cache é removida.
  • O Gerenciador de estado de sessão registra o manipulador de evento Session_OnEnd para ser chamado quando a entrada de cache é removida.
Quando o Gerenciador de estado de sessão remove um objeto de estado de sessão que reside no cache, o Gerenciador de HttpCache irá chamar qualquer retornos de chamada registrados. Na verdade, esse comportamento aumenta o manipulador de evento Session_OnEnd .

Quando você abandonar uma sessão, o cookie de identificação de sessão não é removido do navegador do usuário. Portanto, assim que a sessão foi abandonada, novas solicitações para o mesmo aplicativo usarão a mesma identificação de sessão mas terão uma instância da nova sessão de estado. Ao mesmo tempo, se o usuário abre o outro aplicativo no DNS mesmo domínio, o usuário não perderá seu estado de sessão depois que o método abandonar é chamado de um aplicativo.

Às vezes, talvez não queira reutilizar a identificação de sessão. Se você faça e se você compreender as implicações de não reutilizar a identificação da sessão, use o exemplo de código a seguir para abandonar a uma sessão e desmarque o cookie de identificação de sessão:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Este exemplo de código limpa o estado da sessão do servidor e define o cookie de estado de sessão para nulo. O valor nulo efetivamente limpa o cookie do navegador.

Quando um usuário não logoff do aplicativo e o tempo limite estado de sessão ocorre, o aplicativo ainda pode usar o mesmo cookie de estado de sessão, se o navegador não é fechado. Esse comportamento faz com que o usuário a ser direcionado para a página de logon e o cookie de estado de sessão do usuário para ser apresentado. Para garantir que uma identificação de nova sessão é usada quando você abre a página de logon (login.aspx), enviar um cookie nulo de volta para o cliente. Para fazer isso, adicione um cookie à coleção de resposta. Em seguida, enviar a coleção de resposta de volta para o cliente. A maneira mais fácil de enviar um cookie nulo é usando o método Response.Redirect . Porque a coleção de cookies sempre tem um valor para o ASP.NET_SessionId, você apenas não é possível testar se esse cookie existe porque você irá criar um loop de Response.Redirect . Você pode definir uma seqüência de caracteres de consulta no redirecionamento para a página de logon.

Ou, conforme ilustrado no exemplo de código a seguir, você pode usar um cookie diferente para saber se você já é redirecionado para a página de logon. Para ajudar a aprimorar a segurança e certifique-se que ninguém tenta abrir a página de logon usando um cookie segundo juntamente com o cookie do ASP.NET, o exemplo de código a seguir usa a classe FormsAuthentication para criptografar e descriptografar os dados de cookie. Em seguida, o exemplo de código define um tempo limite de 5 segundos.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbmt kbinfo kbhowto KB899918 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 899918  (http://support.microsoft.com/kb/899918/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store