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 :

Variable de sessions [Débutant]


Sujet :

ASP.NET

Vue hybride

nid4mail Variable de sessions 19/03/2014, 16h57
plume13 Hello, Elle disparaît dans... 19/03/2014, 20h25
DotNetMatt Je confirme ce que dit... 19/03/2014, 22h20
nid4mail Merci de votre réponse à tous... 21/03/2014, 10h16
plume13 J'ai pas trop compris ce que... 21/03/2014, 19h01
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 89
    Par défaut Variable de sessions
    Bonjour,

    je gère les infos de connexion de mes utilisateurs avec des variables de sessions : le nom, le prénom, l'identifiant...

    Ma question porte sur l'après timeout. Une variable de session a une duree de vie limitee dans le temps, temps défini par le développeur.
    Mais après ce timeout que devient la variable de la session? sa valeur? Comment tester si elle existe encore?

    Prenons par exemple l'idée d'une varible appelée NomUtilisateur :

    dans mon fichier global.aspx j'ai sa déclaration dans la fonction Session_Start
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        void Session_Start(object sender, EventArgs e) 
        {
            // Code qui s'exécute lorsqu'une nouvelle session démarre
            Session.Add("NomUtilisateur", "");        
        }
    dans mon fichier default.aspx.cs je l'initalise à l'aide des données contenue dans u annuaire LDAP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Session.Add("NomUtilisateur", entry.Properties["sn"].Value.ToString());
    Ensuite quand j'en ai besoin je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (Session["NomUtilisateur"] != null)
    or après un timeout, le test ne passe pas... Que devient ma variable?

    Merci d'avance

  2. #2
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    Hello,
    Elle disparaît dans le néant...
    C'est le principe d'une session : les variables ont une certaine durée de vie, lorsque la session expire, les données associées ne sont plus accessibles.

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Je confirme ce que dit plume13, j'ajouterai que tu as aussi la possibilité de t'abonner à un callback qui te permet d'être notifié lorsqu'une clef est supprimée de la session. Mais pour cela, il faut utiliser la méthode Cache.Insert. Voici un exemple d'utilisation :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var myObject = string.Empty;
    Cache.Insert("MyKey", myObject, null, DateTime.Now.AddMinutes(2), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.High, new CacheItemRemovedCallback(CacheRemovedCallback));
     
    void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)
    {
    	LogHelper.Log("Cache Expired for the following key: " + key);
    }
    Ici, je stocke mon objet myObject dans la clef "MyKey" pour une durée de 2 minutes. Au bout de 2 minutes, la méthode CacheRemovedCallback sera appelée, et je vais logger l'information.

    La plupart du temps, le callback est utilisé pour logger ce genre d'info. Mais rien ne t'empêche de faire autre chose... Il faut juste faire attention à la maintenabilité de ton code.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 89
    Par défaut
    Merci de votre réponse à tous les deux... il n'y a donc aucun moyen de tester if(Session["maVariable"] existe) apparemment...

    Je n'ai pas très bien compris le callback. Mon projet faisant environ 200 pages, ou faudrait il que je le mette?

  5. #5
    Membre chevronné

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Par défaut
    J'ai pas trop compris ce que tu essaies de faire. Pourquoi as-tu besoin de tester cette variable (ou une autre) ? Es-tu sûr que la mémorisation de NomUtilisateur dans la page Default.aspx.cs soit l'endroit le plus adapté ? Si cela pose problème par la suite, c'est peut-être qu'il y a une erreur de conception en amont.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 89
    Par défaut
    en fait pour pas avoir besoin de recuperer les infos de l'utilisateur à chaque fois, je les récupère automatiquement lors de la connexion (par un LDAP). ensuite lorsque j'ai besoin de ces infos j'appelle la variable de session.

    le problème vient du fait que lorsque la session expire, j'ai une page d'erreur qui s'affiche, une trace dans les logs et aucun moyen de renvoyer l'utilisateur vers une interface de reconnexion. (un peu comme sur ce site lorsque le délai de connexion au site est dépassé, je me retrouve sur l'interface de saisie identifiant et mot de passe). Ce qui quand on a 1500agents connectés à l'appli rempli assez vite le fichiers des logs.

    Or mes tests de connexions sont quasiment tous basés sur ces variables de sessions.

    L'idéal serait que je puisse faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Si Session["NomUtilisateur"] existe alors traitement normal ou gestion de l'erreur (plantage de l'appli ou erreur données)
    Sinon Reconnexion via LDAP (avec page avertissement avant)
    l'interface de reconnexion est faite mais je n'y accède jamais du fait que je n'arrive à savoir l'état de ma variable de session (quand je fais mes tests (mise de la variable de session a null) et que j’accède volontairement à cette page ca marche nickel)

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

Discussions similaires

  1. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30
  2. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28
  3. Effacer les variables de session
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 12/12/2003, 13h42
  4. Variable de session
    Par Sadneth dans le forum ASP
    Réponses: 6
    Dernier message: 14/11/2003, 11h12
  5. variable de session
    Par divableue dans le forum ASP
    Réponses: 2
    Dernier message: 23/10/2003, 16h04

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