IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Utilisation du Global.asax


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Utilisation du Global.asax
    Salut tout le monde

    J'ai farfouillé un peu partout et j'ai lu plein de trucs sur le Global.asax.

    Visiblement c'est sécurisé à mort (pas comme l'ancien global.asa de l'ASP 3.0 ) et ça m'a l'air performant.

    Maintenant y a une question que je n'arrive pas à répondre malgrés la lecture abondante que j'ai trouvé sur le sujet. Quelqu'un pourrait il me vulgariser la chose suivante :

    Lors de l'arrivée d'un visiteur sur le site, le Global.asax est lu et éxécuté avant, pendant ou aprés la constitution de la page ? Si c'est pendant, à quel évènement de la page cela se passe t il ?

    Si je déclare et rempli des variables de session dans le Global.asax sont elles réinitialisées et reremplies à chaque changement de page ?

    Et si je mets une variable "Public Shared" à la place, que lui arrive t il et comment y accéder à partir des autres pages et composants du site ?

    Voilà, c'est un peu brouillon, désolé, mais malgrés toutes mes lectures je n'ai pas trouvé de réponse précise à ces quesitons là.

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Lors de l'arrivée d'un visiteur sur le site, le Global.asax est lu et éxécuté avant, pendant ou aprés la constitution de la page ? Si c'est pendant, à quel évènement de la page cela se passe t il ?
    C'est pas dans le cycle de la page c'est à part.. Ce sont des évennements serveur qui sont dans le global asax... Si tu te met dans le onsession_start du global asax en debug tu verras qu'il passe en tout premier dedans avant de faire autre chose..

    Si je déclare et rempli des variables de session dans le Global.asax sont elles réinitialisées et reremplies à chaque changement de page ?
    Dans quel évennement du global asax ? ca dépend lequel tu choisis...

    Et si je mets une variable "Public Shared" à la place, que lui arrive t il et comment y accéder à partir des autres pages et composants du site ??
    Si tu définis une variable dans le global asax tu y accèdes depuis les pages avec Global.Tavariable.Tostring();
    Par contre attention une variable dans le global asax ca peut être chiant si elle évolue car a chaque redémarrage de l'application tu vas réinitialiser cette variable...

    Voili voilou

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide, ça deveint beaucoup plus clair d'un coup.

    Alors descendons un poil dans le pragmatisme.

    L'évènement qui va m'interresser est surtout celui du début de session et un peu la fin.
    Si je comprends bien, mon visiteur arrive sur une page, le Global.asax est parcouru et basta, on y revient plus.
    Donc si je mets des variables dans le onsession_start, elles vont être chargées et j'y accède dans le reste de mes pages et de mes composants, sans souci.
    Pourquoi un tostring ? On peut pas charger de Integer (par exemple) ?

    Question : dans l'évènement, je déclare mes variables normalement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaVariable as String
    MaVariable = "toto"
    Pour la réinit, pas grave, tel que j'ai besoins de l'utiliser, ça marche surtout à la Session et pas à l'Application.

    Je suppose que je peux gérer des trucs dans l'évènement de cloture de session, genre je vide et détruit toutes mes variables ou elles se vident toute seul aprés le TimeOut serveur ?
    Et aussi, l'évènement de fin de session, il se déclenche si mon utilisateur clique sur le bouton de déconnexion du Contrôle Connexion du MemberShip ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Si je comprends bien, mon visiteur arrive sur une page, le Global.asax est parcouru et basta, on y revient plus.
    C'est pas de ce que j'ai dit le global asax est indépendant des pages.. Si l'utilisateur ou le serveur déclenche un des évennements du global asax tu repasseras dedans.. ( par exemple Application_End).

    Donc si je mets des variables dans le onsession_start, elles vont être chargées et j'y accède dans le reste de mes pages et de mes composants, sans souci.
    Oui.

    Pourquoi un tostring ? On peut pas charger de Integer (par exemple) ?
    C'était un exemple si tu veux récupérer un int tu récupères un int...

    Question : dans l'évènement, je déclare mes variables normalement ?
    A mon avis oui mais j'ai jamais essayé.. Moi les variables du global asax je les déclare en dehors des évennements en variable globale(j'ai besoin de variabl multisession).. Si tu la déclare dans l'évennement je sais pas si elle sera disponible à essayeré... Suffit de poser ta variable et de voir en faisant Global. dans la page si l'intellisense te la ramène..

    Je suppose que je peux gérer des trucs dans l'évènement de cloture de session, genre je vide et détruit toutes mes variables ou elles se vident toute seul aprés le TimeOut serveur ?
    Oui tu peux vider tes variables... Au timeout serveur tu entres dans lévennement Application_End puis Application_Start... dans ces évennements tu peux faire ce que tu veux...

    Et aussi, l'évènement de fin de session, il se déclenche si mon utilisateur clique sur le bouton de déconnexion du Contrôle Connexion du MemberShip ?
    Jamais essayé mais ca parait logique normalement tu devrais passer dans le onSession_end...



  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Alors en ce Lundi matin un peu frisquet je me lance dans le Global.asax.

    Donc je place du code genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Shared ApplicationStr As String
     
        Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
            ApplicationStr = ProjetY.Outils.GetApplicationGUID().ToString
     
        End Sub
    Je me dis que là, c'est cool.
    Et dans un composant utilisateur j'essaie de la récupérer avec un Global. et y a rien qui vient dérrière, juste les NameSpace du projet.
    En fouillant dans le NameSpace, je ne trouve rien sur ma variable.

    Voilà, voilà, un petit coup de main ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    As tu séparé le code source de l'aspx de ton global asax ?

    Global. c'est en C# en vb peut être une différence ?

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    J'ai trouvé !

    Alors oui, en VB y a visiblement une différence. J'ai rien séparé car visiblement l'utilisation d'un lobal.asax.vb n'a pas l'air trés utile, sauf peut être pour faire des Imports.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Shared SES_ApplicationStr, SES_UserIdStr, SES_Nomsite As String
    Public Shared SES_ApplicationGUID, SES_UserGUID As Guid
        Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
            SES_ApplicationGUID = GetApplicationGUID()
            SES_UserGUID = New Guid("00000000-0000-0000-0000-000000000002")
            SES_ApplicationStr = SES_ApplicationGUID.ToString
            SES_UserIdStr = SES_UserGUID.ToString
            SES_Nomsite = GetParamSite("NomSite", "Site")
        End Sub
    Et dans le web.config

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add namespace="ASP.global_asax"/>
    En fait aprés Global. on trouve ASP. et puis global_asax. Et voilà, le tour est joué avec un petit préfixe sur le nom des variables.

    Maintenant j'a plus qu'à trouver toutes les astuces pour limiter les accés BDD. Parce que à l'origine de ma réflexion c'est ça. Je fais beaucoup trop d'accé à la BDD pour remonter la même chose.

    Merci pour ton aide.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    de rien A+++

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Heu, en fait, y a un point que j'ai oublié ! ! !

    Lorsque je me retrouve dans une classe externe, je fais coment pour les appeler les variables du Global.asax ?

    Là, je fais le tour du HttpContext et je crois bien avoir tout fait mais j'ai rien trouvé.

    Une idée ?

  10. #10
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Si tes données ne sont pas statique, tu va avoir du mal à y accéder.

  11. #11
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Et tu peux développer (sans mauvais jeu de mot) parce que ce que tu dis me parait un peu vague.

    Par exemple, si je veux récupérer un chemin sur le serveur je peux faire :
    HttpContext.Current.Server.MapPath("chemin relatif")
    Et ça marche trés bien.

    Maintenant, l'idée c'est d'aller cherche ce qu'il y a dans le Global.asax, rien de plus. Je vois pas le problème de "statique" là dedans. Au début du code je peux leur dire : "pas bouger !" et elles seront statiques, vu qu'elles sont obéïssantes ! ! !

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    static c'est en C# je sais pas si on dit comme ca en Vb... Je pense que c'est de ça dont parle oyigit...

    En regardant ton code j'ai supposé que "PublicShared" équivalait au "Static" de C# ?


    Moi que je fais des variables auquelles je veux accéder en C# je les déclare en en static...


    Je vois pas le problème de "statique" là dedans. Au début du code je peux leur dire : "pas bouger !" et elles seront statiques, vu qu'elles sont obéïssantes ! ! !
    Désolé mais j'ai ri...

  13. #13
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ah OK, on parle de "static", le mot clé. Déjà, vu qu'on est sur le Forum VB, j'&i pas eu le réflexe, mais vu qu'en plus, j'ai pas pris C# en deuxième langue, ben j'ai rien pour moi ! !

    Alors, aprés consultation de mon dico de traduction (heu oui, l'année dernière j'ai trouvé un truc super génial pour passer d'un langage à l'autre ) donc "static" se traduit par "Shared" et "public" par "Public" mais je crois me rapeller que public static en C# est une redondance, c'est ça ?

    Alors vu qu'elles sont déjà Public Shared, pourquoi j'y arrive pas ?

    Je pense qu'il doit me manquer le mot clé de départ. Si c'est pas dans le HttpContext, ça doit être dans un autre truc, mais lequel ?

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Tu peux aussi y accéder comme ca

    Application["SES_ApplicationStr"]...

  15. #15
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    je viens d'essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Application("SES_ApplicationStr")
    Session("SES_ApplicationStr")
    Et sur le deux il me dit :
    Name 'Session' is not declared.
    Name 'Application' is not declared.
    Je pense qu'il lui manque un lien pour aller dans System.ASP, enfin, je crois.

    Sauf que je cherche à lui faire un Imports ou un truc du genre et que dalle, je trouve pas.

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    A quel endroit exactement tu essaie d'accéder a ta variable ?

    Dans quel composant et quel fonction ?

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Par défaut
    Essaie ca

    HttpContext.Current.Application["SES_ApplicationStr"] ...

    ou System.Web.HttpContext.Current.Application["SES_ApplicationStr"]


  18. #18
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ben en fait n'importe où mais dans mes Classes externes.

    Dans mon système j'ai des classes externes genre "outils.vb" qui se trouve dans le répertoire App_Code et dans ces classes j'ai fait des Sub et des Function. Et donc, dans ces Sub et ces Function je voudrais accéder à mes variables "SES_ApplicationStr" (par exemple).

    Vois tu ce que je veux dire ?

  19. #19
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    J'ai posté ma précédente réponse avant de voir que tu avais proposé du code.

    Du coup j'ai bricolé (parce que tel que, ça marche pas)

    Et j'ai réussi un truc, mais je suis pas sûr qu'au niveau perf ça passe bien.

    Dans mon Global.asax je déclare les variables deux fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Shared SES_Nomsite As String
     
        Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
            SES_Nomsite = GetParamSite("NomSite", "Site")
            Session("SES_Nomsite") = SES_Nomsite
        End Sub
    Comme ça, dans mes composants utilisateurs j'y accède avec le nom lui même et j'ai l'AutoComplétion et dans mes classes externes j'y accéde par le HttpContext. Faut juste que je trouve un moyen d'alléger le code parce que ça fait long à chaque fois. Genre je vais remettre ça dans une variable locale à la classe

    Parce que, si j'ai bien compris, on ne peut pas accéder à des variables du Global.asax comme ça. Il faut une vraie variable de Session pour y toucher dans une classe externe.

    Ou alors il y a une autre méthode encore inconnue.

    Merci pour ton aide. Je bricole et je reviens boucler le topic, si ça marche bien.

  20. #20
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Je viens de toucher du doigt les limites de ce que je voulais faire ! ! !

    Donc, les Variables déclarées en haut du Global.asax ce modifie à chaque connexion d'un visiteur, du coup tout le monde tape sur la valeur entrée en dernier dans la variable. (bon OK, c'est moi la patate, ça parait logique maintenant ! ! ! )

    Donc je vais être obligé de travailler uniquement avec des vraies variables de Session. Chiotte, y a pas d'autocomplétion pour celles là !
    De l'aute côté, j'ai plus de déclaration en double à faire et je suis sûr qu'elle vont resté dans la Session du visiteur.

    Reste plus qu'à savoir si le click du bouton de déconnexion du Contrôle serveur Connexion déclenche le Session_End du Global.asax.

    En tout cas merci bien pour ton aide. Je bricole encore un peu et je reviens boucler le topic dés que tout marche bien.

    J'espère au moins que ce long topic servira à des gens.

Discussions similaires

  1. [C#] Rediriger depuis le Global.asax
    Par Pasiphae dans le forum ASP.NET
    Réponses: 3
    Dernier message: 31/08/2009, 15h18
  2. Réponses: 3
    Dernier message: 18/01/2008, 20h45
  3. utiliser Global.asax en vs2005
    Par simodox dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/04/2007, 15h25
  4. [C#][2.0] Comment utiliser le Global.asax ?
    Par slopera dans le forum ASP.NET
    Réponses: 7
    Dernier message: 13/01/2006, 12h48
  5. [vb.net] session et global.asax
    Par lucie.houel dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/06/2005, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo