2009-07-18 8 views
3

J'utilise événement Application_OnPostAuthenticateRequest à global.asax pour obtenirGlobal.asax événement: Application_OnPostAuthenticateRequest

a) rôles et autorisations d'utilisateur authentifié aussi j'ai fait ma coutume classe principale pour obtenir les détails de l'utilisateur et les rôles et l'autorisation.

b) Pour obtenir des informations qui restent identiques pour cet utilisateur.

void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 
{ 

    // Get a reference to the current User 
    IPrincipal objIPrincipal = HttpContext.Current.User; 

    // If we are dealing with an authenticated forms authentication request 
    if ((objIPrincipal.Identity.IsAuthenticated) && (objIPrincipal.Identity.AuthenticationType == "Forms")) 
    { 
     CustomPrincipal objCustomPrincipal = new CustomPrincipal(); 
     objCustomPrincipal = objCustomPrincipal.GetCustomPrincipalObject(objIPrincipal.Identity.Name); 
     HttpContext.Current.User = objCustomPrincipal; 
     CustomIdentity ci = (CustomIdentity)objCustomPrincipal.Identity; 
     HttpContext.Current.Cache["CountryID"] = FatchMasterInfo.GetCountryID(ci.CultureId); 
     HttpContext.Current.Cache["WeatherLocationID"] = FatchMasterInfo.GetWeatherLocationId(ci.UserId); 
     Thread.CurrentPrincipal = objCustomPrincipal; 
    } 
} 

Ma question est la suivante:

  1. Cet événement incendies chaque fois pour chaque demande. Donc, pour chaque requête, le code s'exécute?
  2. Mon approche est-elle correcte ou non?
  3. Est-il juste d'ajouter HttpContext.Current.Cache à cet événement ou nous devrions passer à Session_Start

Répondre

4
  1. Oui cet événement se déclenche pour chaque demande
  2. Oui, vous pouvez utiliser cet événement pour obtenir des informations pour l'utilisateur authentifié
  3. Non, ne pas utiliserHttpCurrent.Current.Cache pour stocker des informations spécifiques à l'utilisateur, car le cache est commun à tous les utilisateurs et vous aurez des conflits. Utilisez plutôt HttpContext.Current.Session car cela sera spécifique à l'utilisateur.
+0

Thnaks, Encore peu de doute d augmenter? Si cet événement se déclenche pour chaque requête, ma connexion à la base de données pour les rôles et les permissions s'exécute pour chaque requête. Est-ce bon, ne pouvons-nous faire la même chose dans l'événement de début de session. –

+0

Oui, il serait préférable d'utiliser l'événement SessionStart car il est exécuté une fois par session utilisateur et vous pouvez stocker des informations spécifiques à l'utilisateur dans l'objet Session. –

+0

Si nous passons tout le code de Application_OnPostAuthenticateRequest() à Session_Start() alors quelle est l'utilisation de Application_OnPostAuthenticateRequest() –

Questions connexes