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 :

classe du app_code et session


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut classe du app_code et session
    Bonjour, j'ai une classe dans mon app_code, qui récupère un nombre dans la base de donnée suivant le User connecté.

    voilà la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public class VariableGlobaleAction
    {
        public static Hashtable IndexStatut = new Hashtable();
        private int nbActionDonnee;
        private int nbActionRecu;
     
    	public VariableGlobaleAction(int val1,int val2)
    	{
    		//
    		// TODO*: ajoutez ici la logique du constructeur
    		//
            SetnbActionDonnee(val1);
            SetnbActionRecu(val2);
    	}
        public VariableGlobaleAction()
        {
        }
     
        public int getnbActionRecu()
        {
            return nbActionRecu;
        }
        public void SetnbActionRecu(int valeur)
        {
            nbActionRecu = valeur;
        }
        public int getnbActionDonnee()
        {
            return nbActionDonnee;
        }
        public void SetnbActionDonnee(int valeur)
        {
            nbActionDonnee = valeur;
        }
    }
    Au départ l'ensemble était en static mais d'après ce que j'ai compris cela venait à faire 2 variables d'Application. Or ce sont des variables propres à chaque utilisateur.
    Cependant je cherche une autre solution que de les mettres en session, en passant justement par une classe.

    Quelqu'un pourrais me dire si c'est possible ou non?
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est un peu confus ton affaire... j'ai pas tout compris
    Citation Envoyé par tortuegenie Voir le message
    Cependant je cherche une autre solution que de les mettres en session, en passant justement par une classe.
    Pourquoi tu ne veux pas les mettre en session ? du peu que j'ai compris, c'est ce qui semble le plus adapté...

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Ben disons que cela commence à faire beaucoup de variable de session, sachant que celle-ci, je ne peux pas les enlever, étant donnée que j'en ai tout le temps besoin.

    Moi ce que je comptais faire c'est faire une classe, les affecté quand l'utilisateur se connecte et après les utiliser quand j'en ai envie, mais à priori, le fait de définir une classe comme celle-ci fait que ces variables deviennent des variables d'application (si on peut me le confirmer) ou alors existe t'il un moyen de définir (à l'aide d'une classe interne à ASP.NET) un ensemble de variable pour chaque utilisateur connecte.

    J'utilise l'authentificaiton par formulaire, sans créditential.

    J'espère que tu comprends mieux maintenant

  4. #4
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Ce n est pas le fait de les mettre dans une classe qui va les rendre variable d application. Cela n a rien a voir, il faut que tu le definisse toi meme pour que cela le devienne.

    Si ce sont des variables que tu dois appeller de temps a autres pour un user donné , tu as plusieurs choix :


    *Continuer a faire des appels a ta base de données en regardant si cela altere vraiment tes performances machines.
    *Continuer a faire des appels a ta base de données et si ce sont des données calculées, tu peux imaginer un stockage temporaire dans une table par exemple
    *les stocker dans un cookie , sont ce des informations confidentielles
    *les passer de pages en pages via le viewstate , perso je deconseille

    Voilà mes pensées du matin.

  5. #5
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Ok, Arthis, ou alors les passer dans une variable de session, séparément:
    Session["VarA"]= nbDonnée;
    Session["VarB"]= nbRecu;

    Ou l'objet Sessions["VarA"]= new VariableGlobaleAction(1,2)

    J'ai vu que je pourrais définir des propriétés de profile dans le web.config mais qu'au final il crée une table tampon dans la base de donnée et y stocke des valeurs, seulement le jour où on passe sous Oracle, cela fonctionne encore??

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par tortuegenie Voir le message
    Moi ce que je comptais faire c'est faire une classe, les affecté quand l'utilisateur se connecte et après les utiliser quand j'en ai envie, mais à priori, le fait de définir une classe comme celle-ci fait que ces variables deviennent des variables d'application (si on peut me le confirmer) ou alors existe t'il un moyen de définir (à l'aide d'une classe interne à ASP.NET) un ensemble de variable pour chaque utilisateur connecte.
    Ca ne "devient" pas des variables d'application, à moins que tu les définisses explicitement en tant que telles. Si tu ne stockes ces variables nulle part, elles sont perdues d'une requête à l'autre.
    Pour stocker d'une requête à l'autre des variables spécifiques à un utilisateur donné, la session reste la solution la plus indiquée... les autres solutions ont toutes des inconvénients majeurs :
    - cookie : pas terrible pour la sécurité, vu que les données sont stockées chez le client
    - viewstate : c'est pas vraiment fait pour ça, et le problème de sécurité est le même que pour les cookies
    - application : c'est partagé entre tous les utilisateurs

  7. #7
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Par contre je t encourage a faire des classes ou en tout cas a regrouper de maniere intelligent tes donnes de facon a ne pas a voir a les chercher sour tous les noms de sessions possible et imaginables :

    Session["montruc"], Session["monmachin"],Session["Aufait"],Session["X"], Session["Variablequivarie"]....

    Preferer un Session["MonUser"] qui contient une classe qui elle meme te permet de faire ce que tu veux. Cela ne te fais qu un poin d'entree, c est plus simple a maintenir...

  8. #8
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    En fait je pensais qu'il stockait mes variables de la classe VariableGlobaleAction pour chaque utilisateur, or lorsqu'un nouvel utilisateur se connecte, ben elles sont écrasées, je pensais qu'elle était considérer comme appartenant à la session c'est pour cela que je dis qu'elles deviennent des "variables d'Application".

    Est ce que le fait d'utiliser une 50taine de variables de Session est gérable au niveau du serveur.

    Sinon je pourrais créer un profile dans le web.config mais bon j'ai pas besoin de stocker ces données une fois que l'utilisateur n'est plus connecté.

  9. #9
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Que veux-tu dire exactement Arthis.

    Exemple pour ma classe VariableActionGloable, faire
    Session["VariableActionGlobale"] = new VariableActionGlobale(x,y)

    Et ensuite ((VariableActionGlobale)Session["VariableActionGlobale"]).x

    Je ne vois pas trop ce que tu veux dire, donc si tu peux dvp un peu.

    Merci

  10. #10
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((VariableActionGlobale)Session["VariableActionGlobale"]).x
    oui , mais utilise un accesseur que tu auras defini dans une page de base dont tes pages heriteront , cela t'evitera d avoir a caster a chaque utilisation:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public class PageBase : Page
    {
     
    public VariableActionGlobale Mavariableactionglobale 
    {
    get {return  (VariableActionGlobale) Session["VariableActionGlobale"]    }
    }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public class pagex: PageBase
    {
     
    public void PAgeLoad()
    {
        Mavariableactionglobale .mamethdoe();
        Mavariableactionglobale .mapropriete = 3;
    }

  11. #11
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Cela veut dire que je ne peux pas faire des classes indépendantes dans le app_code. Tel que j'ai fais actuellement.

    J'ai bien une page mère qui me sert à gérer l'internationalisation et une page d'erreur, mais je ne sais pas si c'est mieux de tout mettre dans la page mère.

    D'autant plus que certaines variable de session, je n'en ai besoin que sur 2 ou 3 pages.

    Sinon quel était ton idée de départ quand tu me parlais de faire des classes et de les stocker en session.

  12. #12
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    je ne te parle pas de tout mettre dans la page mere, mais juste d'embarquer le contexte de ton user comme ceci.
    Ensuite ton argument de j ai besoin de telle infos seulement pour 2-3 pages ne tient pas. Peu importe que tu en ai besoin pour 2 pages peut etre que demain ce sera 5. et Il s agit la surtout de centraliser ton code. Tu vas ainsi interagir avec toutes tes variables de session de la meme facon.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class UserDeMonApplication 
    {
    public mamethode();
    public mapropriete ;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public class PageBase : Page
    {
     
    public UserDeMonApplication MonUser 
    {
    get {return  (UserDeMonApplication ) Session["MonUser "]    }
    }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public class pagex: PageBase
    {
     
    public void PAgeLoad()
    {
        MonUser.mamethdoe();
        MonUser.mapropriete = 3;
    }

  13. #13
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Je sais que mon argument était nul mais c'était une façon d'expliquer les choses.

    Donc en fait pour chaque classe je définit getteur dans la page mère comme cela je peux hérité directement.C'est bon j'ai compris l'idée.

    Maintenant, est'il mieux de faire cela (passer une classe en session) ou bien de créer 5 variables de session pour stocker mes 5 données dont j'ai besoin et donc ne plus utiliser la notion de classe.

    Seulement,comme tu l'a dit le fait de faire cela, les sessions ne sont plus centraliser.

  14. #14
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Ce n est plus a moi de critiquer le facon dont je procede ,

    Bon code à toi en tout cas,

  15. #15
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Merci à toi Arthis!!

    Juste encore une petite broutille.

    dans le cas que tu ma présenté, comment je fais pour le mettre en session.
    ex:
    Session["User"] = new PersonneConnecte();

  16. #16
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    juste comme tu l as ecrit et dans ce cas la mets le en variable de session a l'ouverture de ta session.

  17. #17
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Je le mets au moment du login, sur le click du bouton de connexion.

    Je sais que je suis chiant mais j'ai une seconde classe comme cela.
    Seulement voilà, je ne peux pas faire de constructeur avec des paramètres car les paramètres dépendent du choix de l'utilisateur.
    Est ce qu'il est possible d'instancier un objet de la classe au niveau de la page en question,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public partial class SelectionSCUS : PageCulture
    {
          SCUS scus = new SCUS();
    }
    puis ds le code
    scus.maméthode() qui est un setteur

    et dans la click du bouton valider
    faire Session["scus"] = scus;

    est ce que c'est faisable, sinon je fais des sessions spécifiques à chaque variables.

  18. #18
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Tu peux instancier ton objet au niveau de ta page et le sotcker en session. MAis comme je te l ai deja dis (ente les lignes...) , ma politique et que si c est quelquechose qui doit etre mis en session alors autant le creer a l ouverture de la session et l enlever a la fermeture de la session. Ensuite, cela ne veut pas dire que tes objets mis en session seront chargés completement, mais au mois tu pars du meme etat initial dans toutes pages et cela te fais te poser mioins de questions au final.

    Maintenant, cela est ma facon de programmer, qui n'est ni pire ni meilleure. Tu peux aussi faire comme tu le dis et n instancier et attribuer a ta session ton objet qu au moment ou tu en as besoin.

    A+ bon courage à toi,

  19. #19
    Membre éprouvé
    Inscrit en
    Septembre 2007
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 137
    Par défaut
    Merci beaucoup Arthis, pour tout tes conseils.

    Il est vrai que chacun a son propre "style" de programmation.
    Je préfère, moi ajouter et enlever des objets en session quand j'en ai besoin et quand je n'en ai plus besoin, quelque part je me dis que si cel apeut allèger la charge de travail du serveur, pourquoi pas.

    Après est ce que cela le soulage réellement(à voir), mais c'est surtout qu'en faisant comme cela, je peux éviter que l'utilisateur évite de taper directement l'adresse dans l'url, (y'a un certains ordre à respecter pour remplir certaines pages).

    En fait je pose ces questions car j'en profite pour faire un peu de "ménage" dans mon appli et comme tu me la suggèrer, (dans la page mère), je viens de créer une classe SessionUtils, ou je vais faire des méthodes statiques, pour centraliser les sessions.

    Merci, de ton aide et si jamais je peux rendre service, n'hésite pas, je sais quand même faire quelque bonnes choses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sessions et Classes dans App_Code
    Par cinemania dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/07/2010, 13h50
  2. Réponses: 4
    Dernier message: 12/03/2008, 13h18
  3. class dans App_code
    Par tetedeturcq dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/05/2007, 15h22
  4. Réponses: 2
    Dernier message: 09/10/2005, 15h35
  5. [Sessions] Classes et variables de sessions
    Par Thanaroth dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2005, 16h17

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