DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 899918 - Última revisão: sexta-feira, 8 de Setembro de 2006 - Revisão: 1.3

 

INTRODUÇÃO

Este artigo descreve como e porquê os IDs de sessão de Microsoft ASP.NET são utilizados.

Mais Informação

O estado de sessão do ASP.NET é uma tecnologia que permite-lhe armazenar dados do lado do servidor, específicas do utilizador. As aplicações de Web podem utilizar estes dados para processar pedidos do utilizador para o qual o estado da sessão foi instanciado. Um utilizador de estado de sessão é identificado por um ID de sessão. O ID da sessão é fornecido, utilizando um dos seguintes métodos:
  • O ID de sessão é parte de um cookie que é enviado para o browser do utilizador.
  • O ID da sessão está incorporado no URL. Esta técnica é também conhecido como uma sessão sem cookies .
ID de sessão são um número aleatório de 120 bits que é representado por uma cadeia de 20 caracteres. A cadeia é formatada para que podem ser incluído num URL e não tem de sofrer codificação URL. Por exemplo, a cadeia poderá ser utilizada em sessões de cookie menor. O método mais utilizado de entrega de IDs de sessão é utilizando cookies para armazenar os IDs de sessão.

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

Quando o utilizador navega no mesmo domínio DNS, o navegador da Web continua a enviar este cookie para o domínio para o qual foi originado.

Por exemplo, app1.tailspintoys.com e app2.tailspintoys.com são ambas as aplicações do ASP.NET. Se o utilizador vai para app1.tailspintoys.com e, em seguida, vai para app2.tailspintoys.com, ambas as aplicações para controlar o estado da sessão do utilizador dentro de cada aplicação utilize o mesmo cookie e o mesmo ID de sessão. As aplicações não partilham o mesmo estado da sessão. As aplicações partilham apenas o ID da sessão.

Por conseguinte, pode reutilizar IDs de sessão por diversas razões. Por exemplo, se reutilizar IDs de sessão, não é necessário que efectuar o seguinte:
  • Criar um novo ID de sessão exclusiva criptograficamente quando lhe for apresentado um ID de sessão válido.
  • Crie um ID de sessão de novo para cada aplicação do ASP.NET num único domínio.
Quando a aplicação da Web requer um início de sessão e terminar página ou opção oferece, recomendamos que desmarque o estado da sessão quando o utilizador tem sessão o Web site. Para limpar o estado da sessão, chame o método Session.Abandon . O método Session.Abandon permite-lhe limpar o estado da sessão sem aguardar que o estado de sessão de tempo limite. Por predefinição, este limite de tempo é um validade deslizante 20 minutos. Este expiração é actualizada sempre que o utilizador faz um pedido para o Web site e apresenta o cookie do ID de sessão. O método Abandon define um sinalizador no objecto de estado de sessão que indica que o estado da sessão deverá ser abandonado. O sinalizador é examinado e activado após no fim do pedido de página. Por conseguinte, o utilizador pode utilizar objectos de sessão na página depois de chamar o método Abandon . Assim que o processamento da página estiver concluído, a sessão é removida.

Quando utiliza o modo de estado de sessão no processo, estes objectos de estado de sessão são armazenados na HttpCache. O HttpCache suporta um método de chamada de retorno quando se verificam as seguintes condições:
  • Uma entrada de cache é removida.
  • O Gestor de estado de sessões regista o processador de eventos Session_OnEnd a ser chamado quando é removida a entrada da cache.
Quando o Gestor de estado de sessões remove um objecto de estado de sessão que reside na cache, o Gestor de HttpCache chamará quaisquer chamadas de retorno registadas. Na realidade, este comportamento aumenta o processador de evento Session_OnEnd .

Quando abandonar uma sessão, o cookie do ID de sessão não é removido o browser do utilizador. Por conseguinte, assim que a sessão foi abandonada, quaisquer novos pedidos para a mesma aplicação irão utilizar o mesmo ID da sessão mas terão de uma instância de estado da nova sessão. Ao mesmo tempo, se o utilizador abrir outra aplicação de DNS mesmo domínio, o utilizador não perderá o estado de sessão depois do método Abandon é chamado a partir de uma aplicação.

Por vezes, não poderá reutilizar o ID da sessão. Se efectuar e se compreender as consequências da não reutilizar o ID da sessão, utilize o seguinte exemplo de código para abandonar uma sessão e para limpar o cookie do ID de sessão:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
este exemplo de código limpa o estado de sessão do servidor e define o cookie de estado de sessão para um valor nulo. O valor nulo limpa eficazmente o cookie a partir do browser.

Quando um utilizador não regista da aplicação e o tempo limite estado da sessão ocorre, a aplicação pode ainda utilizar o mesmo estado cookie da sessão se não fechar o browser. Este comportamento faz com que o utilizador será direccionado para a página de início de sessão e o cookie de estado de sessão do utilizador para ser apresentado. Para garantir que é utilizado um ID de sessão de novo quando abre a página de início de sessão (login.aspx), envia um cookie nulo ao cliente. Para isso, adiciona um cookie a colecção de resposta. Em seguida, envia a colecção de resposta para o cliente. A forma mais fácil de enviar um cookie nulo é utilizando o método Response.Redirect . Porque a colecção de cookies sempre tem um valor para o ASP.NET_SessionId, não poderá testar apenas se este cookie existe porque vai criar um ciclo de Response.Redirect . Pode definir uma cadeia de consulta de redireccionamento para a página de início de sessão.

Ou, conforme ilustrado no seguinte exemplo de código, pode utilizar um cookie diferente para indicar se o já são redireccionados para a página de início de sessão. Para ajudar a melhorar a segurança e para se certificar de que ninguém está a tentar abrir a página de início de sessão utilizando um segundo cookie juntamente com o cookie do ASP.NET, o exemplo de código seguinte utiliza a classe FormsAuthentication para encriptar e desencriptar os dados de cookie. Em seguida, o exemplo de código define um tempo limite de 5 segundos. privada
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft