Jaka jest różnica między Session i HttpContext.Current.Session obiektu?Różnica między Session i HttpContext.Current.Session
Odpowiedz
Nie ma różnicy.
Element pobierający dla Page.Session zwraca sesję kontekstową.
Nic. Session
wskazuje tylko na HttpContext.Current.Session
.
Trochę za późno, ale tutaj jest coś, co właśnie odkryłem.
@Phillipe Leybaert i @CSharpAtl są niepoprawne. Właściwość HttpApplication
ma inną aktywność niż właściwości obiektu HttpContext.Current.Session
. Oba będą zwracać odwołanie do tej samej instancji HttpSessionState
, jeśli jest dostępna jedna. Różnią się tym, co robią, gdy nie ma instancji HttpSessionState
dostępnej dla bieżącego żądania.
Nie wszystkie HttpHandler
s zapewniają stan sesji. Aby to zrobić, należy zaimplementować [jeden lub oba?] Interfejsy znaczników HttpHandler
, lub .
HttpContext.Current.Session
po prostu zwraca null
, jeśli nie ma sesji.
wykonanie W HttpApplication
„s nieruchomości Session
zgłasza HttpException
z komunikatem Session state is not available in this context.
zamiast zwracania null
odniesienia.
Niektóre przykłady HttpHandler
, które nie implementują sesji, są domyślnymi procedurami obsługi zwykle statycznych zasobów, takich jak pliki obrazów i CSS. Wszelkie odniesienia do właściwości HttpApplication
w takich przypadkach (jak w przypadku programów obsługi zdarzeń global.asax
) będą skutkować wyświetleniem HttpException
.
Nie trzeba dodawać, że nieoczekiwany HttpException
zapewnia WTF ?! moment, jeśli nie spodziewasz się tego.
Obiekt klasy HttpApplication
Session
jest realizowany w ten sposób (z reflektorem):
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public HttpSessionState Session
{
get
{
HttpSessionState session = null;
if (this._session != null)
{
session = this._session;
}
else if (this._context != null)
{
session = this._context.Session;
}
if (session == null)
{
throw new HttpException(SR.GetString("Session_not_available"));
}
return session;
}
}
Dzięki za wniesienie wysiłku, aby wypełnić lepszą odpowiedź. – nicodemus13
Bez problemu. Właśnie miałem dość irytujący WTF? moment, który zajęło trochę czasu. Pomyślałem, że udokumentuję to, żeby ktoś inny nie musiał tracić czasu na zastanawianie się, co się dzieje. –
- 1. Jaka jest różnica między getDefaultInstance() i getInstance() w klasie Session?
- 2. HttpContext.Current.Session kontra Context.Session
- 3. HttpContext.Current.Session ma wartość null + OWIN
- 4. HttpContext.Current.Session ma wartość null w pliku Ashx
- 5. Różnica między unwrapObservable i()
- 6. Różnica między "**/* /" i "** /"?
- 7. Różnica między | = i^= css
- 8. Composer.phar różnica między | i ||
- 9. Różnica między "% ~ dp0" i ". \"?
- 10. Różnica między ". +" I ". +?"
- 11. MySQL: Różnica między ",", "i"
- 12. Różnica między (++ i) oraz (i ++)
- 13. nHibernate session i wielowątkowość
- 14. Różnica między użyciem requests.get() i requests.session(). Get()?
- 15. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 16. ASP.NET + C# HttpContext.Current.Session jest null (Wewnątrz WebService)
- 17. Różnica między logger.info i logger.debug
- 18. Różnica między fgets i fscanf?
- 19. Różnica między NSLog i DLog
- 20. Różnica między RoutedEventHandler i EventHandler
- 21. Różnica między obrysem i wypełnieniem?
- 22. Różnica między Parameters.Add i Parameters.AddWithValue
- 23. Różnica między putback() i unget()
- 24. Różnica między Delegate.BeginInvoke i Thread.Start
- 25. Różnica między TVar i TMVar
- 26. Różnica między DatagramSocket i DatagramChannel
- 27. Różnica między intent.setClass() i intent.setComponent()
- 28. różnica między -lgcc_s i gcc
- 29. Różnica między string.ToLower i TextInfo.ToLower
- 30. Różnica między javax.sql i java.sql?
Warto wyjaśnić, że kiedy mówisz „sesja”, do którego się odnosimy System.Web.UI.Page.Session . Obiekt Session jest dostępny w kontekście strony ASP.NET. – Llyle