DetailPage-MSS-KB

Microsoft Knowledge Base

Identificativo articolo: 899918 - Ultima modifica: venerdì 8 settembre 2006 - Revisione: 1.3

 

INTRODUZIONE

Questo articolo viene descritto come e perché gli ID di sessione di Microsoft ASP.NET sono utilizzati.

Informazioni

Lo stato di sessione ASP.NET è una tecnologia che consente di archiviare dati specifici dell'utente sul lato server. Le applicazioni Web è possono utilizzare questi dati per elaborare le richieste dall'utente per il quale lo stato della sessione è stata creata un'istanza. Un utente di stato sessione è identificato da un ID di sessione. Utilizzando uno dei metodi descritti di seguito viene fornito l'ID di sessione:
  • L'ID di sessione fa parte di un cookie che viene inviato al browser dell'utente.
  • L'ID di sessione è incorporato nell'URL. Questa tecnica è nota anche come una sessione senza cookie .
ID di sessione sono 120 bit casuali rappresentato da una stringa di 20 caratteri. La stringa è formattata in modo che può essere inclusi in un URL e non è necessario sottoposta a codifica URL. Ad esempio, è possibile utilizzare la stringa in sessioni senza cookie. Il metodo di uso più frequente di fornire l'ID di sessione consiste nell'utilizza i cookie per memorizzare l'ID di sessione.

Quando un utente apre la prima volta il browser Web e si apre un sito Web che implementa lo stato sessione ASP.NET, un cookie viene inviato a browser con il nome "ASP.NET_SessionId" e un valore di 20 caratteri.

Quando l'utente accede all'interno dello stesso dominio DNS, il browser continua a inviare questo cookie al dominio per il quale è stato con origine.

Ad esempio, app1.tailspintoys.com e app2.tailspintoys.com sono entrambe le applicazioni ASP.NET. Se l'utente passa a app1.tailspintoys.com e passa quindi app2.tailspintoys.com, entrambe le applicazioni utilizzeranno lo stesso cookie e lo stesso ID sessione per registrare lo stato della sessione dell'utente all'interno di ogni applicazione. Le applicazioni non condividono lo stesso stato di sessione. Le applicazioni di condividono solo l'ID sessione.

Di conseguenza, è possibile riutilizzare ID di sessione per diversi motivi. Ad esempio, se si riutilizza l'ID di sessione, non è necessario effettuare le seguenti operazioni:
  • Creare un nuovo ID di sessione univoco da un punto di vista crittografico, quando riceve un ID di sessione valido.
  • Creare un ID sessione nuova per ogni applicazione ASP.NET in un singolo dominio.
Quando l'applicazione Web richiede un accesso e offre la disconnessione di pagina o opzione, si consiglia di che si deseleziona che lo stato della sessione quando l'utente ha disconnesso il sito Web. Per cancellare lo stato della sessione, è necessario chiamare il metodo Session.Abandon . Il metodo Session.Abandon consente di cancellare lo stato della sessione senza attendere il timeout di stato sessione. Per impostazione predefinita, questo valore di timeout è una scadenza variabile 20 minuti. La scadenza viene aggiornata ogni volta che l'utente effettua una richiesta al sito e presenta il cookie ID di sessione. Il metodo Abandon imposta un flag nell'oggetto di sessione di stato che indica che lo stato della sessione deve essere chiusa. Il flag è esaminato e quindi elaborato alla fine della richiesta della pagina. Di conseguenza, l'utente può utilizzare oggetti di sessione all'interno della pagina dopo aver chiamato il metodo Abandon . Non appena viene completata l'elaborazione della pagina, la sessione viene rimosso.

Quando si utilizza la modalità stato sessione in-process, questi oggetti di stato sessione vengono memorizzati nel HttpCache. Il HttpCache supporta un metodo di callback quando sono vere le seguenti condizioni:
  • Una voce della cache viene rimosso.
  • Gestione dello stato sessione registra il gestore di eventi di Session_OnEnd da chiamare quando la voce della cache viene rimosso.
Quando Gestione dello stato sessione rimuove un oggetto di stato sessione che risiede nella cache, il gestore HttpCache chiamerà le richiamate registrate. In effetti, questo comportamento genera il gestore di eventi Session_OnEnd .

Quando si abbandona una sessione, il cookie ID di sessione non viene rimosso dal browser dell'utente. Di conseguenza, non appena la sessione è stata chiusa, qualsiasi nuova richiesta alla stessa applicazione utilizzerà lo stesso ID sessione, ma sarà un'istanza nuova sessione di stato. Allo stesso tempo, se l'utente apre un'altra applicazione all'interno del DNS stesso dominio, l'utente non perda lo stato di sessione dopo il metodo Abandon da un'applicazione.

In alcuni casi, potrebbe non voler riutilizzare l'ID sessione. Se si si e se si conoscono le conseguenze di riutilizzo non l'ID di sessione, utilizzare il nell'esempio di codice riportato di seguito per abbandonare una sessione e deselezionare il cookie ID di sessione:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
questo esempio di codice Cancella lo stato della sessione dal server e imposta il cookie di stato di sessione null. Il valore null cancella in modo efficace il cookie dal browser.

Quando un utente non registra dall'applicazione e si verifica il timeout di stato sessione, l'applicazione può ancora utilizzare lo stesso cookie stato sessione se il browser non viene chiuso. L'utente può essere indirizzate alla pagina di accesso e cookie di stato della sessione dell'utente per essere presentato a causa di questo comportamento. Per garantire che un ID della nuova sessione viene utilizzato quando si apre la pagina di accesso (login.aspx), inviare un cookie null nuovamente al client. A tale scopo, aggiungere un cookie all'insieme di risposta. Quindi, inviare nuovamente l'insieme di risposta al client. Il modo più semplice per inviare un cookie null consiste nell'utilizzare il metodo Response.Redirect . Poiché sempre l'insieme di cookie dispone di un valore per il ASP.NET_SessionId, è Impossibile verificare solo se il cookie esiste verrà creato un ciclo di Response.Redirect . È possibile impostare una stringa di query sul reindirizzamento alla pagina di accesso.

In alternativa, come illustrato nell'esempio di codice riportato di seguito, è possibile utilizzare un cookie diverso per indicare se già Verrai reindirizzato a pagina di accesso. Per migliorare la protezione e per assicurarsi che nessuno tenta di aprire la pagina di accesso utilizzando un cookie secondo insieme con il cookie ASP.NET, nell'esempio di codice riportato di seguito utilizza la classe FormsAuthentication per crittografare e decrittografare i dati di cookie. L'esempio di codice imposta quindi un timeout di 5 secondi.
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 ) );
}

Le informazioni in questo articolo si applicano a:
  • Microsoft .NET Framework 1.1
Chiavi: 
kbmt kbinfo kbhowto KB899918 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell’articolo: 899918  (http://support.microsoft.com/kb/899918/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Condividi
Altre opzioni per il supporto
Forum del supporto di Microsoft Community
Contattaci direttamente
Ricerca di un partner certificato Microsoft
Microsoft Store