Quelle est la différence entre l'objet Session et l'objet HttpContext.Current.Session?Différence entre Session et HttpContext.Current.Session
Répondre
Il n'y a pas de différence.
Le getter pour Page.Session renvoie la session de contexte.
Rien. Session
pointe seulement sur HttpContext.Current.Session
.
Un peu en retard ici, mais voici quelque chose que je viens de découvrir.
@Phillipe Leybaert et @CSharpAtl sont tous deux incorrects. La propriété Session
présente un comportement différent de celui de la propriété HttpContext.Current.Session
. Ils renverront tous deux une référence à la même HttpSessionState
instance si est disponible. Ils diffèrent dans ce qu'ils font lorsqu'il n'y a aucune instance de HttpSessionState
disponible pour la requête en cours.
Tous les HttpHandler
ne fournissent pas l'état de session. Pour ce faire, le HttpHandler
doit mettre en œuvre [une ou les deux?] Les interfaces de marqueur IRequiresSessionState
ou IReadOnlySessionState
.
HttpContext.Current.Session
renvoie simplement null
s'il n'y a aucune session disponible.
La mise en œuvre de HttpApplication
de la propriété Session
lève une HttpException
avec le message Session state is not available in this context.
plutôt que de retourner une référence null
.
Certains exemples de HttpHandler
qui n'implémentent pas de session sont les gestionnaires par défaut pour les ressources normalement statiques, telles que les fichiers image et CSS. Toute référence à la propriété Session
de HttpApplication
dans de tels cas (comme dans les gestionnaires d'événements global.asax
) entraînera le lancement d'un HttpException
.
Inutile de dire que le HttpException
inattendu fournit un WTF ?! moment si vous ne vous y attendez pas.
La propriété Session
de la classe HttpApplication
est mis en œuvre ainsi (du réflecteur):
[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;
}
}
Merci de mettre l'effort pour remplir une meilleure réponse. – nicodemus13
Pas de problème. Je venais juste d'avoir une WTF plutôt agaçante? moment qui a pris un certain temps pour régler. Je me suis dit que je le documenterais afin que quelqu'un d'autre n'ait pas à passer le temps à comprendre ce qui se passait. –
- 1. différence de session entre active_record_store et cookie_store
- 2. Différence entre sqlreader et
- 3. Différence entre -Wconversion entre gcc et g ++
- 4. Différence entre DECLARE_DYNAMIC et DECLARE_DYNCREATE?
- 5. Différence entre JNLP et JavaFX
- 6. Différence entre HTTPContextBase.User et MembershipUser
- 7. Différence entre FileStreamResult et FilePathResult?
- 8. Différence entre Delegate.Invoke et délégué()
- 9. Différence entre scanf() et fgets()
- 10. Différence entre DataGrid et GridView
- 11. Différence entre "__method__" et "méthode"
- 12. Différence entre BOOST_CHECK_CLOSE et BOOST_CHECK_CLOSE_FRACTION?
- 13. Différence entre "\ n" et Environment.NewLine
- 14. Différence entre admin.site.root et admin.site.urls
- 15. Différence entre Roles.GetRolesForUser et Roles.Provider.GetRolesForUser?
- 16. Différence entre val() et text()
- 17. Différence entre control.Attributes.Add et control.Attributes []
- 18. Différence entre value et itemvalue
- 19. Différence entre Send.nc et SendMsg.nc
- 20. Différence entre System.Web.Cache et HTTPContext.Curent.Cache
- 21. Différence entre feature et plugin.xml?
- 22. Quelle est la différence entre ViewState, Application et Session of a Page?
- 23. Différence entre l'exception d'application et l'exception système
- 24. Différence entre iCalendar (.ics) et vCalendar (.vcs)
- 25. Objective-C: différence entre id et void *
- 26. Différence entre un objet et un hachage?
- 27. Différence entre Gridview et Datagrid dans Asp.net
- 28. Différence C++ entre 0 et 0,0
- 29. Différence entre XMLReader.Create() et new XMLTextReader()
- 30. Différence entre type (obj) et obj .__ classe__
Il convient de préciser que lorsque vous dites « session », vous faites référence à System.Web.UI.Page.Session . L'objet Session est disponible dans le contexte de la page ASP.NET. – Llyle