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

Langage PHP Discussion :

[Cookies] pb : compteur avec des sessions : marche mal


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut [Cookies] pb : compteur avec des sessions : marche mal
    je suis en train de concevoir un compteur pour mon site perso. Ca marche bien (il compte le nombre de visites pour chaque page dans un fichier), mais j'ai voulu utiliser les sessions pour éviter qu'il n'icrémente le contenu du fichier du compteur si quelqu'un clique sur 'actualiser' ou revient sur une page un peu plus tard.

    Mon système fonctionne très bien sous easyPHP (je me suis inspiré de divers tutoriaux), mais pas sur internet (ftp de chez Tiscali/Alice).
    C'est-à-dire qu'il ne renvoie aucun message d'erreur, mais il compte à chaque fois même quand il ne devrait pas! J'utilise un index principal qui inclut les pages annexes (codées dans la variable $page via la méthode GET), et qui appelle la fonction compteur si le nom de la page actuelle n'est pas encore dans la variable de session. J'ai bien sûr un session_start au tout début de mon index.
    Voici le code de la partie comptage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (!isset($_SESSION['stat'])) //aucune page n'a encore été visitée
    {
      $_SESSION['stat']=array($page);  // $_SESSION['stat'] est un tableau
                                                        // contenant les noms de toutes les
                                                        //pages visitées lors de la session
      increase_stat($page); //appel à mon compteur
    }
    elseif (!in_array($page,$_SESSION['stat']))  //la variable de session existe, mais la
                                                                     //page n'a pas encore été visitée
    {
      $_SESSION['stat'][]=$page;
      increase_stat($page);
    }
    Or il appelle la fonction de comptage à chaque fois (en fait il va donc à chaque fois dans la première partie du test), comme s'il créait la variable de session à chaque fois!

    J'ai aussi essayé une autre version qui utilise la fonction "session_register" plutot que la superglobale $_SESSION, mais c'est pareil.

    Je ne comprend pas pourquoi ça ne marche pas (alors que ça marche sous easyPHP )
    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    est ce que tu as bien mis "session_start()" au début de ton script ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    J'ai bien sûr un session_start au tout début de mon index.
    Oui!

    Et je le répète, la session marche bien sous easyPHP (il compte bien une et une seule fois!), c'est sur le net que ça marche plus Ce n'est donc pas un quelconque oubli...
    Je supppose donc que ça vient de la config du serveur de tiscali, mais je vois pas du tout en quoi puique meme la vesrion sans superglobale $_SESSION (avec session_register) marche pas mieux...

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    essaye ce petit bout de code sur le serveur et dit nous ce que tu obtients
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
     
    if (!isset($_SESSION['nb'])) {
    	$_SESSION['nb'] = 0;
    }
     
    echo ++$_SESSION['nb'];
    echo '<hr/>';
    echo $_COOKIE['PHPSESSID'];
    si les sessions fonctionnent bien, le nombre augmente d'un unité à chaque rafraichissement de page et sur la deuxième ligne, l'identifiant de session reste identique

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    gr! voilà ce que j'ai :

    Warning: Cannot send session cookie - headers already sent by (output started at /www/test.php:2) in test.php on line 3

    Warning: Cannot send session cache limiter - headers already sent (output started at /www/test.php:2) in test.php on line 3
    1
    --------------------------------------------------------------------------------

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    il faut que tu mette "<?php" tout au début de ton fichier sans laisser d'espace ou de retour à la ligne (http://php.developpez.com/faq/?page=...s_already_sent)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    ok, y'av bien un retour à la ligne.

    Par contre, il n'affiche que "1" à chaque fois, et pas de session id.

    Comme si les sessions ne marchaient pas du tout...

    En fait, j'ai bien peur que ce soit ça le pb... En effet, j'y avais pas pensé, mais quand un site utilise les sessions, on le voit dans la barre d'adresse non? (du style ...&session=19112...) et là on voit rien.

    Le serveur php Tiscali ne permettrait pas les sessions?!!
    Pourtant il 'a pas l'air de rechigner quand on lui fait un session_start();


  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    Citation Envoyé par flof
    quand un site utilise les sessions, on le voit dans la barre d'adresse non? (du style ...&session=19112...) et là on voit rien.
    non là mon test était prévu pour passer par les cookies

    regarde ce que donne "phpinfo" pour la configuration par défaut des sessions

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    hmm voilà ce que j'ai :

    version php : 4.0.5

    Session : Support enabled

    session.auto_start : Off Off
    session.cache_expire : 180 180
    session.cache_limiter : nocache nocache
    session.cookie_domain : no value no value
    session.cookie_lifetime : 0 0
    session.cookie_path : /flof/ nevermind
    session.cookie_secure : Off Off
    session.entropy_file : no value no value
    session.entropy_length : 0 0
    session.gc_maxlifetime : 1440 1440
    session.gc_probability : 100 100
    session.name : PHPSESSID PHPSESSID
    session.referer_check : no value no value
    session.save_handler : files files
    session.save_path : /tmp /tmp
    session.serialize_handler : php php
    session.use_cookies : On On
    les sessions sont donc disponibles. Mais qu'en penser d'autre :

  10. #10
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    session.cookie_path : /flof/ nevermind
    bizarre cette ligne
    est ce que tes url sont du genre "http//serveur/flof/test.php" ? si oui alors ce n'est pas ça

    tu n'aurais pas une règle de sécurité avec ton navigateur qui bloque les cookie sur le net ?
    est ce que tu pourrais donner l'url où tu as mis mon code de test ?

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    bizarre cette ligne
    est ce que tes url sont du genre "http//serveur/flof/test.php" ?
    Non, du genre http//flof.chez-alice.fr/... Alors sur leur serveur ils ont peut-etre un dossier pour chaque site, qui s'appelle flof dans mon cas parceque c'est le nom de domaine que j'ai choisi.
    Et l'adresse "flof.chez-alice" renvoie sans doute vers ce dossier.

    url du test :
    http://flof.chez-alice.fr/test.php


    (url du phpinfo :http://flof.chez-alice.fr/phpinfo.php)

    Et non, mon navigateur ne bloque pas les cookies normalement puisque j'en ai toujours plein de stockés dans le dossier temporaire...


    Et puis au passage merci de prendre du temps à m'aider

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    Citation Envoyé par flof
    bizarre cette ligne
    est ce que tes url sont du genre "http//serveur/flof/test.php" ?
    Non, du genre http://flof.chez-alice.fr/... depuis quelques mois, et avant c'etait flof.chez.tiscali.fr/... (Tiscali et alice ont fusionné)
    Alors sur leur serveur ils ont peut-etre un dossier pour chaque site, qui s'appelle flof dans mon cas parceque c'est le nom de domaine que j'ai choisi.
    Et l'adresse "flof.chez-alice" renvoie sans doute vers ce dossier, comme "flof.chez.tiscali" le faisait auparavant...

    url du test :
    http://flof.chez-alice.fr/test.php


    (url du phpinfo :http://flof.chez-alice.fr/phpinfo.php)
    là est le problème alors
    le cookie est bien crée mais il a le chemin "/flof/" donc le navigateur a seulement le droit de le transmettre pour les urls qui commencent par http://flof.chez-alice.fr/flof/

    essaye de mettre la ligne suivante avec le "session_start"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session_set_cookie_params(0, '/');

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    J'ai essayé, mais ça ne change rien (là sur internet il ya la version avec le set_cookie).

    De toute façon je ne pense pas que ça puisse venir de là.
    En effet :

    -d'une part tout ce qui concerne mon site est justement stocké dans un dossier "flof", qui, je pense, n'a rien à voir avec celui mentionné dans le phpinfo puisque c'est moi qui l'ai créé pour différencier mon site perso des autres dossiers sur mon ftp qui me servent à stocker d'autres trucs.

    -d'autre part, http://flof.chez-alice.fr/flof/test.php (l'ancienne version, sans le set_cookie) ne marche pas mieux.

    -enfin, quand je testais la version sous easyPHP (et qui fonctionnait parfaitement), les sessions marchaient et s'affichaient dans l'URL => meme sans cookies ca marche pas ?

  14. #14
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 705
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 705
    Par défaut
    en fait la réponse est la -> http://flof.chez-alice.fr/phpinfo.php -> PHP Version 4.0.5
    le tableau $_SESSION n'existe que depuis PHP 4.1.0

    dans ce cas le seul conseil qui me vient à l'esprit est de te proposer de t'inscrire pour une hébergement gratuit chez free.fr par exemple si tu ne veux pas modifier toutes tes pages

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    ah! ok merci...

    Bon par contre (désolé je suis tenace ) j'avais soupçonné que ça foire avec les tableaux superglobaux, (il me semble que je pouvais pas utiliser $_GET, seulement $HTTP_GET_VARS...) et j'ai donc testé une version avec les anciennes fonctions session_register($var) et session_is_registered($var):

    c'est quasiment la même qu'en haut, mais ça marche pas non plus!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (!session_is_registered($pages_list))    //utiliser plutôt isset???
    {
    	$pages_list = array($page);
    	session_register($pages_list);
    	increase_stat($page);
    }
    elseif (!in_array($page,$pages_list))
    {
    	$pages_list[]=$page;
    	increase_stat($page);
    }
    parceque on peut faire des sessions sans $_SESSION non?. Mais la question est comment? Ce code n'est pas bon (pareil que l'autre, il fait pas de msg d'erreur, mais il incremente à chaque fois comme si les sessions n'etaient pas prises en compte), mais je sais pas pourquoi...

    Bon au moins on avancé, la question est maintenant comment ne pas utiliser $_SESSION?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    Citation Envoyé par le manuel php
    <?php
    session_start();

    // Utilisez $HTTP_SESSION_VARS avec PHP 4.0.6 ou plus ancien
    if (!isset($_SESSION['compteur'])) {
    $_SESSION['compteur'] = 0;
    } else {
    $_SESSION['compteur']++;
    }
    ?>
    bon je pense avoir trouvé la solution sur le manuel php ; en fait il devrait suffire de renplacer mon $_SESSION par $HTTP_SESSION_VARS... et non session_register($var) comme je le pensais, à tort (apparemment session_register() est une variante "implicite" de session_start() )
    Je vais essayer ça...

  17. #17
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Euh... je te conseille de t'aligner sur la version de php de ton hébergeur pour ne pas avoir de surprise !

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    LOL! ben c'est bien le hic...(cf page1 du sujet): la version de mon hébergeur c'est 4.0.3 donc PAS DE $_SESSION.
    Logiquement, ça devrait aller avec $HTTP_SESSION_VARS qui était avant la 4.1. (d'ailleurs, je suis aussi obligé dutiliser $HTTP_GET_VARS au lieu de $_GET par ex.)

    C'estr ce que je pensais, tout à l'heure. J'ai donc testé ça, MAIS CA MARCHE TOUJOURS PAS!

    je sais plus quoi faire

  19. #19
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par flof
    (cf page1 du sujet)
    j'avais sauté le message en question. dsl
    Citation Envoyé par flof
    je sais plus quoi faire
    Change d'hébergeur ?

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Par défaut
    Citation Envoyé par Mr N.
    j'avais sauté le message en question. dsl
    Citation Envoyé par flof
    je sais plus quoi faire
    Change d'hébergeur ?
    changer d'hébergeur pour un pb de sessions? hmmm... sachant que les sessions sont supportées, jaimerais plutôt savoir pourquoi et résoudre le pb (appel à tout spécialiste des sessions); merci du conseil, mais bon j'ai pas besoin de ce forum pour avoir ce genre de réponse

    mais bon peut-etre que mon pb est irrésoluble? (auquel cas tu aurais raison ) j'espère pas...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Compteur avec des caractères
    Par bibilolo2 dans le forum C
    Réponses: 10
    Dernier message: 18/07/2007, 16h35
  2. Problème avec le redirectionnement avec des sessions
    Par gaston_83 dans le forum Langage
    Réponses: 1
    Dernier message: 08/06/2007, 18h54
  3. [JpGraph] Utilisation avec des sessions
    Par dervish dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/01/2007, 12h11
  4. Faire un compteur pour des sessions utilisateurs
    Par liverbird dans le forum C++Builder
    Réponses: 55
    Dernier message: 21/06/2006, 16h37
  5. Pb validation HTML avec des sessions PHP
    Par fredylover dans le forum Langage
    Réponses: 12
    Dernier message: 07/05/2006, 13h15

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