Quelle est la différence entre ces deux HttpContext.Actuel.Session et de la Session asp.net 4.0
Quelle est la différence entre ces 2 pièces de codes.
HttpContext.Current.Session["myvariable"]
Session["myvariable"]
asp.net 4.0 et C# 4.0
Vous devez vous connecter pour publier un commentaire.
Ils sont efficacement les mêmes, qu'ils auront accès à la même Session de données.
La raison pour laquelle vous pouvez appeler
Session
dans votre code-behind est parce que ASP.Net les pages par défaut prolonger laSystem.Web.UI.Page
type. Cela a unSession
propriété publique. Si vous regardez le code dans le Réflecteur, vous pouvez voir qu'il appelle justeHttpContext.Current.Session
lui-même (par ses propresContext
propriété).Dans d'autres classes, vous n'aurez pas accès à la propriété, mais vous pouvez utiliser
HttpContext.Current.Session
pour accéder à la session de données au lieu de cela, aussi longtemps que vous êtes en cours d'exécution dans le contexte d'une application web.Sur une normale de réflexion scénario qu'ils sont les mêmes. La différence est que la première déclaration de travaux statique dans des contextes tels que les WebMethod.
Il y a une différence. La seconde (
Session
) est une propriété de de nombreux .NET des objets, commePage
par exemple. Donc, vous ne pouvez pas avoir accès, dans le constructeur de ces objets par exemple. Toutefois, le premier (HttpContext.Current.Session
), est toujours prêt et à votre disposition (bien sûr, après la session est chargé dans le Pipeline de Traitement de Demande).Il n'y a pas de différence. Page.Session retourne le
HttpContext.Current.Session
Avec cela étant dit, j'ai écrit .dll qui agissent comme des extensions pour les applications web. Ces .dll n'ont pas de notion de
Session
. Dans ces cas, je peux accéder à la session en cours de l'application web à l'aide de mon .dll en référencementHttpContext.Current.Session
Il n'y a pas de différence. Ils sont la même chose; la deuxième forme est plus court 🙂
Il n'y a pas de différence dans le comportement. Si vous utilisez le code dans votre classe personnalisée où HttpContext n'est pas directement disponible et souhaitez accéder à la session de la valeur que nous utilisons première ligne de code, tandis que la seconde ligne est utilisé lors de l'accès à la Page ou classes de contrôle.
Un autre assez approfondie de la réponse de Nicolas Carey https://stackoverflow.com/a/6021261/365017
"HttpApplication Session de la propriété des expositions comportement différent que celui de la proporty HttpContext.Actuel.Session. Ils seront à la fois renvoyer une référence à la même HttpSessionState exemple si l'on est disponible. Ils diffèrent en ce qu'ils font quand il n'y a aucune instance de HttpSessionState disponible pour la demande actuelle.
Pas tous HttpHandlers fournir l'état de la session. Pour ce faire, le HttpHandler doit mettre en œuvre [un ou les deux?] le marqueur d'interfaces IRequiresSessionState ou IReadOnlySessionState.
HttpContext.Actuel.Session retourne simplement la valeur null si il n'y a pas de session disponible.
La HttpApplication de la mise en œuvre de la Session de la propriété jette un HttpException avec le message d'état de Session n'est pas disponible dans ce contexte. plutôt que de retourner une référence nulle."
en Interne, Page.Session points de C'est HttpContext.Actuel.Session seulement, mais il ya encore deux différences en fonction de l'endroit où il est appelé.
Page.Session peuvent être accessibles qu'à partir de classes héritées du Système.Web.L'INTERFACE utilisateur.Page et qu'il va jeter HttpException lors de l'accès à partir de WebMethod.
Où que HttpContext.Actuel.Session peut être consulté à partir de n'importe où tant que vous êtes en cours d'exécution dans le contexte d'une application web.
Autre différence importante, où vous pouvez accéder à la Page.Session mais ne peut pas accéder à HttpContext.Actuel.Session :
Si il y a une méthode nommée GetData dans votre page(héritée de Système.Web.L'INTERFACE utilisateur.Page), qui est exécutée simultanément dans différents threads à partir d'une autre page, la méthode, la méthode GetData pouvez accéder à la Page.Seession, mais vous ne pouvez pas accéder HttpContext.Actuel.Session.
C'est parce que GetData a été appelée à partir de différents thread afin HttpContext.Le courant est nul et HttpContext.Actuel.Session jeter référence nulle exception, mais la Page.La Session sera encore attaché à l'objet de page si la page méthode GetData pouvez accéder à la Page.Session.