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 :

Compter les sessions


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut Compter les sessions
    Comment puis-je compter le nombre d'utilisateurs qui sont en train de voir une certaine page asp.net et non pas le website en general? Je veux compter les sessions anonymes et les sessions utilisateurs connectes.

  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
    A priori il suffirait d'incrémenter un champ statique dans le Page_Load, et le décrémenter dans le Page_Unload...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Shared currentUsers As Integer = 0
     
    Private Sub Page_Load(sender As Object, e As EventArgs)
        currentUsers += 1
    End Sub
     
    Private Sub Page_Unload(sender As Object, e As EventArgs)
        currentUsers -= 1
    End Sub

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut
    Merci bcp. Mais dans mon cas , je suis en train de compter le nombre d'utilisateurs qui sont en train de voir un hotel ( cad la page est : viewhotel?hotelID=xxx). Donc pour chaque hotel, j'ai une page asp.net.

    Comment puis-je les compter ?

  4. #4
    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
    dans ce cas tu peux utiliser un dictionnaire, pour associer à chaque hotel le nombre de visiteurs :
    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
    Public Shared currentUsers As New Dictionary(Of Integer, Integer)
     
    Private Sub Page_Load(sender As Object, e As EventArgs)
        If currentUsers.ContainsKey(hotelID) Then
            currentUsers(hotelID) += 1
        Else
            currentUsers(hotelID) = 1
        End If
    End Sub
     
    Private Sub Page_Unload(sender As Object, e As EventArgs)
        If currentUsers.ContainsKey(hotelID) Then
            currentUsers(hotelID) -= 1
        End If
    End Sub

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut
    Merci beaucoup tomlev.

  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 Identifiant Voir le message
    Merci beaucoup tomlev.
    Ca fonctionne ? je pose la question, parce que, ne pratiquant pas beaucoup ASP.NET, je ne suis pas trop sûr du moment où se produisent les évènements Load et Unload...

  7. #7
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    En théorie ça ne devrait pas fonctionner, il faut passer par les sessions car les pages ne gardent pas l'état (State).
    De plus, le page unload ne devrait pas fonctionner (ça fonctionnerait en Winforms mais pas en asp vu que les états des pages sont perdus juste après le rendu).
    Unload : Unload is called after the page has been fully rendered, sent to the client, and is ready to be discarded. At this point, page properties such as Response and Request are unloaded and any cleanup is performed.
    Bref, il faut :
    - Travailler avec une variable stockée dans Application() (pour le stockage des compteurs associés aux hotels, on pourrait aussi gérer ça en BD mais travailler avec des objets en mémoire est beaucoup plus rapide) et Session() unload (pour la MAJ des compteurs lorsque l'utilisateur n'est plus considéré comme "sur le site") et le Load des pages (pour que le compteur associé au dernier hotel vu soit décrémenté si on l'avait vu précédemment, un simple If sur une variable session qui contient l'ID de l'hotel de la dernière page vue peut faire ça).

    Après faut l'implémenter c'est sûr, mais c'est tout à fait faisable, quoique ma méthode ne soit peut être pas optimale (car à chaque page vue elle nécessite un appel d'une méthode qui met à jour les compteurs au besoin, et que si l'utilisateur n'est plus actif depuis quelques minutes (donc n'est peut être plus vraiment "sur la page", c'est à dire l'état avant le session unload) l'info stockée n'est pas véridique à 100% (ce détail peut être gênant si la session a un timeout qui n'est pas celui par défaut (>1h par exemple) mais dans la plupart des cas cela ne gène pas)).

  8. #8
    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 MicaelFelix Voir le message
    En théorie ça ne devrait pas fonctionner, il faut passer par les sessions car les pages ne gardent pas l'état (State).
    De plus, le page unload ne devrait pas fonctionner (ça fonctionnerait en Winforms mais pas en asp vu que les états des pages sont perdus juste après le rendu).
    C'est pour ça que je déclare currentUsers en Shared... la classe n'étant pas déchargée, les champs statiques sont conservés. Par contre tu as sans doute raison sur le Unload... il vaut effectivement mieux décrémenter le compteur de l'hotel précédent dans le Load de la page suivante

  9. #9
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est pour ça que je déclare currentUsers en Shared... la classe n'étant pas déchargée, les champs statiques sont conservés. Par contre tu as sans doute raison sur le Unload... il vaut effectivement mieux décrémenter le compteur de l'hotel précédent dans le Load de la page suivante
    Personnellement je ne l'ai pas testé pour l'instant, j'ai trouvé cette information :
    > 1. Does class shared variable share same feathers as ASP.NET application
    > variable?
    > Ans. NO. class shared variables are lost once the request is being
    > processed and page is sent back to client. But application variables are
    > stored on the server.
    http://www.velocityreviews.com/forum...in-aspnet.html

    Bref le shared ne serait pas selon cette personne vraiment mémorisé jusqu'à la fin... mais je crois avoir vu des exemples inverse donc ce n'est pas assuré à 100%.

    Personnellement dans le monde du web et de "l'oubli d'état" je n'utilise que :
    1. Application("maVariable")
    2. Session("maVariable")
    3. Et l'autre objet dont j'ai oublié le mot et qui permet de stocker physiquement sur une page ASP.Net des informations temporaires (que l'utilisateur pourrait décoder en regardant le code html)

    Bref pour moi : Shared = Winforms, et je ne l'utiliserai pas dans une application web pour éviter la confusion ou des erreurs potentielles.

    Il faudrait que je teste avec Shared pour confirmer la non-validité de la chose mais là je n'ai pas VSD sur ce poste alors... ça sera pour une autre fois.

  10. #10
    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 MicaelFelix Voir le message
    Bref le shared ne serait pas selon cette personne vraiment mémorisé jusqu'à la fin... mais je crois avoir vu des exemples inverse donc ce n'est pas assuré à 100%.
    Ca me surprend un peu quand même... ça voudrait dire que la classe est déchargée de l'AppDomain après le traitement de la requête ?! Pas génial en termes de perfs... Mais effectivement c'est sans doute moins fiable que Server["variable"], parce que la classe pourrait être déchargée si elle n'est pas utilisée pendant un certain temps (mais je doute qu'elle soit systématiquement déchargée après chaque requête)

    Citation Envoyé par MicaelFelix Voir le message
    3. Et l'autre objet dont j'ai oublié le mot et qui permet de stocker physiquement sur une page ASP.Net des informations temporaires (que l'utilisateur pourrait décoder en regardant le code html)
    Le ViewState peut-être ?

    Citation Envoyé par MicaelFelix Voir le message
    Bref pour moi : Shared = Winforms, et je ne l'utiliserai pas dans une application web pour éviter la confusion ou des erreurs potentielles.
    Shared n'est absolument pas lié à WinForms, c'est un concept de POO. C'est comme ça qu'on déclare en VB.NET un membre statique. Ca peut être utilisé dans n'importe quel type d'application (y compris dans un appli web, à condition d'être conscient des "risques" que ça implique).

  11. #11
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Le ViewState peut-être ?
    Exact, merci

    Citation Envoyé par tomlev Voir le message
    Shared n'est absolument pas lié à WinForms, c'est un concept de POO.
    Oui je suis conscient que c'est lié à la POO, mais je veux dire par là que j'éviterai de stocker des choses là dedans lorsqu'on utilise ça sur ASP.Net, sauf si on me prouve que la persistance est "totale".

Discussions similaires

  1. Compter les syllabes d'un mot français
    Par david_chardonnet dans le forum Langage
    Réponses: 4
    Dernier message: 09/05/2014, 10h57
  2. Réponses: 19
    Dernier message: 03/08/2004, 10h26
  3. [langage] compter les retour à la ligne
    Par Kinethe dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2004, 16h36
  4. [C#] Compter les lignes d'un DataSet
    Par alexischmit dans le forum ASP.NET
    Réponses: 13
    Dernier message: 26/04/2004, 15h17
  5. Compter les valeurs d'un tableau
    Par leeloo076 dans le forum ASP
    Réponses: 6
    Dernier message: 30/03/2004, 13h29

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