7
votes

ASP.NET MVC: S'assurer que l'utilisateur a toujours un ensemble de variable de session

Considérez une application ASP.NET MVC nécessitant une variable de session être définie. Il est utilisé dans tout l'application. Il sera défini en lisant une valeur hachée sur le cookie du navigateur ou après avoir connecté l'utilisateur.

dans le modèle WebForms + Master Page, je vérifierais la page_LOAD () de la page maître. Peut-être pas l'événement ultime, mais c'était facile à trouver.

Comment vérifieriez-vous et appliqueriez-vous l'existence d'une variable de session dans ASP.NET MVC? Considérez que cette question pourrait ne pas impliquer les détails de la connexion des utilisateurs, mais une autre pièce de données (heure de visite, peut-être).

tentatives de solution xxx < / pré>


1 commentaires

Avez-vous essayé d'utiliser Application_pRequesthandlerexecute ?


3 Réponses :


10
votes

Vous avez deux options.

1.PLacez la logique dans la fonction Initialiser CODE> Fonction P>

supposant que tous vos contrôleurs héritent d'un contrôleur de base, vous pouvez placer la logique nécessaire dans la substitution du Exécuter () Code> Fonction du contrôleur de base. P>

public void Application_PreRequestHandlerExecute(Object source, EventArgs e)
{
    HttpApplication application = (HttpApplication)source;
    HttpContext context = application.Context;

    // use an if statement to make sure the request is not for a static file (js/css/html etc.)
    if(context != null && context.Session != null)
    {
          // use context to work the session
    }
}


5 commentaires

@Baddie - Merci pour les suggestions! Malheureusement, la 2e option entraîne une référence d'objet non définie . J'ai mis à jour la question avec des détails. Merci encore!


Mise à jour ma réponse. Vous devez utiliser l'événement Application_PReReQuestHandLerexecute au lieu du Application_BeGinRequest Comme la session n'est pas construite là-bas. Jetez un coup d'œil à mon édition.


@Omar Cela m'a aidé, option 1. Nécessaire pour vérifier le rôle d'un utilisateur pour le statut de l'administrateur et le stocker YAY ou NAY en session avant que chaque action n'exécute. Merci.


@WebRifusion - Si vous utilisez ASP.NET MVC 2 ou 3 Utilisez la méthode Initialiser au lieu de la méthode Execute .


Je suis confus. Est bon modèle d'utilisation applicatif_prequesthandlerexecute ou session_start ?



2
votes

Je ne sais pas que je comprends bien la question, mais je le fais en outre la méthode ontayExecutation du contrôleur.

là, vous effectuez le code pour voir si la variable de session existe. Sinon, créez-le, le cas échéant, utilisez-le. P>

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
  if (filterContext.HttpContext.Session != null)
  {
       //TODO: Get value from session etc.
  }
  base.OnActionExecuting(filterContext);
}


0 commentaires

0
votes

comme une autre alternative, la classe de contrôleurInvoker invoque chaque méthode d'action; Il est attribué au contrôleur via l'usine de contrôleur. Vous pouvez donc sous-classer cet invocateur d'action, chaque fois qu'une action est invoquée (en remplaçant la méthode Invokeaction), vérifiez ici pour cette existence ...


0 commentaires