Care este diferența dintre aceste două HttpContext.Current.Session și Session – asp.net 4.0 (Programare, C#, Asp.Net, Sesiune, Variabile De Sesiune, Httpcontext)

MonsterMMORPG a intrebat.

Care este diferența dintre aceste 2 bucăți de coduri.

HttpContext.Current.Session["myvariable"]
Session["myvariable"]

asp.net 4.0 și C# 4.0

8 răspunsuri
Kasaku

Ele sunt efectiv același lucru, în sensul că vor accesa aceleași date Session.

Motivul pentru care puteți apela Session în code-behind este pentru că paginile ASP.Net extind în mod implicit System.Web.UI.Page tipul. Aceasta are un Session proprietate publică. Dacă vă uitați la codul pentru acest tip în Reflector, puteți vedea că se apelează pur și simplu HttpContext.Current.Session însuși (prin intermediul propriului său Context proprietate).

În alte clase nu veți avea acces la această proprietate, dar puteți folosi HttpContext.Current.Session pentru a accesa în schimb datele sesiunii, atâta timp cât rulați în contextul unei aplicații web.

Comentarii

  • Ei bine, obiectul pe care îl returnează proprietățile este același, dar dacă nu există o sesiune HttpContect.Current.Session va returna null, în timp ce Page.Session va arunca o HttpException. –  > Por Polymorphix.
Varianta

Într-un scenariu standard, acestea sunt identice. Diferența constă în faptul că prima declarație va funcționa și în contexte statice, cum ar fi o WebMethod.

Comentarii

  • Aceasta este cea mai ușor de înțeles diferență. –  > Por Sangram Nandkhile.
Saeed Neamati

Există o diferență. Cea de-a doua (Session) este o proprietate a multor obiecte .NET, cum ar fi Page de exemplu. Deci, nu puteți avea acces la ea, de exemplu, în constructorul acestor obiecte. Cu toate acestea, prima (HttpContext.Current.Session), este întotdeauna gata și la dispoziția dumneavoastră (desigur, după ce sesiunea este încărcată în Request Processing Pipeline).

James Hill

Nu există nicio diferență. Page.Session returnează HttpContext.Current.Session

Acestea fiind spuse, am scris .dll-uri care acționează ca extensii pentru aplicațiile web. Aceste .dll-uri nu au conceptul de Session. În aceste cazuri, pot accesa sesiunea curentă a aplicației web care utilizează fișierul .dll, făcând referire la HttpContext.Current.Session

Icarus

Nu există nicio diferență. Sunt același lucru; a doua formă este mai scurtă 🙂

Nps

Nu există nicio diferență de comportament. Dacă utilizați codul în clasa dvs. personalizată în care HttpContext nu este direct disponibil și doriți să accesați valoarea sesiunii, atunci folosim prima linie de cod, în timp ce a doua linie este utilizată la accesarea în clasele Page sau Control.

Steve G.

Un alt răspuns destul de amănunțit de la Nicholas Carey https://stackoverflow.com/a/6021261/365017

„Proprietatea Session a HttpApplication prezintă un comportament diferit față de cel al proprietății HttpContext.Current.Session. Ambele vor returna o referință la aceeași instanță HttpSessionState, dacă este disponibilă una. Ele diferă prin ceea ce fac atunci când nu există o instanță de HttpSessionState disponibilă pentru cererea curentă.

Nu toți HttpHandlerii furnizează starea sesiunii. Pentru a face acest lucru, HttpHandler trebuie să implementeze [una sau amândouă?] interfețele marker IRequiresSessionState sau IReadOnlySessionState.

HttpContext.Current.Session returnează pur și simplu null în cazul în care nu există o sesiune disponibilă.

Implementarea proprietății Session de către HttpApplication aruncă o HttpException cu mesajul Session state is not available in this context. în loc să returneze o referință nulă.”

Jay Shah

La nivel intern, Page.Session indică Este HttpContext.Current.Session doar, dar există totuși două diferențe în funcție de locul de unde este apelat.

Page.Session poate fi accesat numai din clase moștenite din System.Web.UI.Page și va arunca HttpException atunci când este accesat din WebMethod.
În timp ce HttpContext.Current.Session poate fi accesat de oriunde, atâta timp cât se execută în contextul unei aplicații web.

O altă diferență importantă este aceea că puteți accesa Page.Session, dar nu puteți accesa HttpContext.Current.Session :

Dacă în pagina dumneavoastră există o metodă numită GetData (moștenită din System.Web.UI.Page) care este executată concomitent în diferite fire de execuție față de o altă metodă de pagină, metoda GetData poate accesa Page.Seession, dar nu poate accesa HttpContext.Current.Session.

Acest lucru se datorează faptului că GetData a fost apelat de pe un fir diferit, astfel încât HttpContext.Current este nul, iar HttpContext.Current.Session va arunca o excepție de referință nulă, dar Page.Session va fi în continuare atașat la obiectul pagină, astfel încât metoda GetData poate accesa Page.Session.