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 :

Garder en mémoire la liste des visiteurs


Sujet :

ASP.NET

  1. #1
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut Garder en mémoire la liste des visiteurs
    Bonjour,
    je voudrais stocker en mémoire la liste des visiteurs qui visitent certaine de mes pages, pour cela j'ai crée une procédure qui me stock la liste des connectés en cache mais les informations n'y restent pas longtemps et je voudrais les stocker au moins 24h, voici mon code :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
      public List<Connection> AfficherConnecte(Page page)
            {
                bool creer = false;
     
                List<Connection> connections = page.Cache["connecte"] as List<Connection>;
                if (connections == null)
                {
                    // première création du cache
                    creer = true;
                    connections = new List<Connection>();
                }
     
                string ip = page.Request.UserHostAddress;
                string pseudo = (page.User.Identity == null || !page.User.Identity.IsAuthenticated) ? "Non connecté" : page.User.Identity.Name;
                DateTime date = DateTime.Now;
     
                Connection findCon = new Connection();
                if (pseudo == "Non connecté")
                {
                    findCon = connections.Where(c => c.Ip == ip && c.Page == page.Title).SingleOrDefault();
                }
                else
                {
                    findCon = connections.Where(c => c.Pseudo == pseudo && c.Page == page.Title).SingleOrDefault();
                }
     
                if (findCon == null)
                {
                    Connection connection = new Connection()
                    {
                        Ip = ip,
                        Heure = date,
                        Pseudo = pseudo,
                        Page = page.Title
                    };
                    connections.Add(connection);
                }
                else
                {
                    findCon.Heure = date;
                    findCon.Ip = ip;
                }
     
     
                if (creer)
                {
                    page.Cache.Insert("connecte", connections, null, date.AddDays(1), Cache.NoSlidingExpiration);
                }
                else
                {
                    page.Cache["connecte"] = connections;
                }
     
                return connections;
            }
    ma classe connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Serializable()]
        public class Connection
        {
            public string Ip { get; set; }
            public DateTime Heure { get; set; }
            public string Pseudo { get; set; }
            public string Page { get; set; }
     
            public override string ToString()
            {
                return "IP: " + Ip + " Heure: " + Heure.ToLongTimeString() + " Pseudo: " + Pseudo + " Page: " + Page;
            }
        }
    Est-ce que le cache n'est pas la bonne solution ou ai-je fais une erreur ? (J'avais pas envie de stocker ces informations en BDD)

  2. #2
    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
    Citation Envoyé par youtpout978 Voir le message
    Est-ce que le cache n'est pas la bonne solution ou ai-je fais une erreur ? (J'avais pas envie de stocker ces informations en BDD)
    Le cache peut être une bonne solution, cependant il y a toujours un risque de perdre son contenu si jamais un IIS reset survient, ou un reboot du serveur, par exemple.

    Si ce sont des données sensibles, il vaut mieux soit stocker en base, même temporairement, soit créer un fichier XML sur le disque dur et y stocker le contenu de la sérialisation de ta classe Connection.
    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.

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    En faîte ce n'est pas des données sensible c'est juste pour savoir combien de personne visite mes pages chaque jour, c'est un site personnel.

    Mais j'ai l'impression que dès qu'il y a plus personne sur mon site le cache est réinitialisé.
    Est-ce que la configuration de mon hébergeur peut avoir un lien avec ça, vu que j'avais un problème similaire avec les sessions et j'ai du mettre une machinekey pour le résoudre, ou est-ce le fonctionnement du cache en lui même.

  4. #4
    Membre éclairé

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    618
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 618
    Par défaut
    Bonjour,
    Peut être l'objet Application serait-il plus persistant que Page.cache

  5. #5
    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
    Citation Envoyé par youtpout978 Voir le message
    En faîte ce n'est pas des données sensible c'est juste pour savoir combien de personne visite mes pages chaque jour, c'est un site personnel.
    Dans ce cas, quel serait l'intérêt d'avoir un compteur qui ne t'affiche qu'un nombre approximatif ? Autant se tourner vers des solutions telles que Xiti qui te fourniront des données précises, et t'éviterons de redévelopper la roue

    Citation Envoyé par youtpout978 Voir le message
    Mais j'ai l'impression que dès qu'il y a plus personne sur mon site le cache est réinitialisé.
    Oui c'est un comportement normal, ça se paramètre dans IIS. Si tu regardes les processus de ta machine, lorsque tu visites ton site, le processus W3P.exe est actif. Si tu arrêtes ta navigation, il disparait au bout d'un certain temps (lorsqu'il n'y a plus d'activité).

    Citation Envoyé par youtpout978 Voir le message
    Est-ce que la configuration de mon hébergeur peut avoir un lien avec ça, vu que j'avais un problème similaire avec les sessions et j'ai du mettre une machinekey pour le résoudre, ou est-ce le fonctionnement du cache en lui même.
    Oui ça vient de la config de l'hébergement. Si tu es en dédié ou en VPS, il faut que tu ailles jeter un oeil dans IIS. Si tu es en mutualisé, il faut vérifier si l'hébergeur laisse la permissions de gérer ces paramètres individuellement, ce qui n'est pas garanti...
    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.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Citation Envoyé par vanquish Voir le message
    Bonjour,
    Peut être l'objet Application serait-il plus persistant que Page.cache
    merci c'est que je vais testé j'avais du mal à trouver où il était mais il est aussi dans page

    Oui c'est du mutualisé et à part Plesk j'ai aucun contrôle sur IIS, je vais testé si dans Application c'est bon sinon je me tournerai vers la BDD ou une solution tel que Xiti et compagnie.

    Edit: finalement même problème avec Application, je test XITI actuellement, si ça me convient pas je passerais par un autre service ou j'utiliserais ma BDD pour ça.

    Merci à vous en tout cas.

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

Discussions similaires

  1. garder en mémoire le contenu des arraylist
    Par tululululu dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 23/06/2010, 17h35
  2. [List] Garder en mémoire la position d'un iterator
    Par Djobird dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/05/2009, 14h50
  3. Garder en mémoire des variables
    Par Mandjames dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/05/2009, 15h40
  4. [MySQL] Problème pour garder en mémoire un item selectionné dans une liste déroulante
    Par car0line dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/04/2009, 14h26
  5. garder en mémoire des valeurs postées
    Par boriskov dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2008, 11h43

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