Aide - Recherche - Membres - Calendrier
Version complète : Include d'un compteur PHP avec session
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
clic4
Bonjour !

J'ai écrit un compteur de visite qui utilise les sessions. Jusque là tout marche parfaitement dans le meilleur des mondes wink.gif

Mon problème c'est que lorsque j'appelle mon fichier compteur.php avec un include (dans un autre fichier php)
Code
<?php
include("http://localhost/ldes/compteur/compteur.php");
?>


il semble que la session est détruite et qu'une nouvelle commence... Du coup, aulieu de compter une visite par session, je compte une visite par hit icon_mrgreen.gif
Rien avoir avec ce que je cherche.

Ma question est donc:

Est-ce que l'utilisation d'include détruit une session ?



clic4
amoss
reponse : non absolument pas !
je n'utilise que des include pour naviguer dans la partie membres d'un de mes sites et il n'ya pas besoin de se reconnecter à chaque page (heureusement !)

le probleme vient plutôt de la facon dont tu code tes sessions ...
il faut voir le code icon_biggrin.gif
clic4
Bien, merci pour la réponse. icon_biggrin.gif

Je vais donc rentrer dans les détails... avec du code. Tout d'abord, je crée trois fichiers.

Fichier: creer.php
Code
session_start();
session_register("visite");

$test = session_is_registered("visite");
print ( $test );

Qui me sert à enregistrer une variable "visite" dans la session

Fichier: tester.php
Code
session_start();

$test = session_is_registered("visite");
print ( $test );

Ce fichier va tester si une variable "visite" est enregistrée

Si je lance creer.php et ensuite tester.php, pas de problème, session_is_registered me renvoit true.

Par contre, si je lance creer.php et qu'ensuite j'utillise le script suivant:
Code
<?php

include("tester.php");

?>


le fichier tester.php n'affiche rien du tout icon_eek.gif Ma variable n'existe plus ? Pourquoi dans ce cas session_is_registered retourne-t-elle false ??

Je pige pas ce qui cloche... qui peut m'aider ?

Clic4
clic4
Re-bonjour ! icon_biggrin.gif

Mon problème n'est pas suffisament clair ?
Personne pour m'expliquer ce comportement ?

Si une bonne âme pouvait venir à mon secours ou carrément me proposer un exemple de compteur par session (appelé par un include)...

Clic4
clic4
Bon, après quelques tests supplémentaires je peux apporter des précisions à mon problème.

Il semble que ça soit lié à l'adresse utilisée dans mon include. En effet, si j'utilise "http://localhost/monSite/compteur.php", à chaque fois que j'appelle mon compteur avec l'include, une nouvelle session est crée (une nouvelle id est créée).
Par contre, si je ne précise pas l'adresse et que l'include pointe dans le même répertoire, par exemple: include ("compteur.php") ça marche parfaitement ! Chaque appel avec include ne crée pas de nouvelle session (même id).

J'aimerais donc savoir ce qu'il y a de faux quand j'utilise l'url complet (avec http://) et comment je peux faire l'include pour lire dans le répertoire de mon choix. Je ne me souviens jamais comment retrouver la racine du site...

J'espère être clair... ou du moins n'avoir pas trop embrouillé l'histoire icon_mrgreen.gif Pour résumé, je sais pas faire un include correctement...

Clic4

amoss
clic4 (Jun 1 2005, 04:37 PM) a dit :
si je lance creer.php et qu'ensuite j'utillise le script suivant:
Code
<?php

include("tester.php");

?>



deux choses : pour enregistrer une variable de session il y a
Code
$_SESSION['visite']='ok';
(par exemple)

ensuite, toute page doit commencer par
Code
<?
session_start();

ce qui n'est pas le cas de ton script dans lequel tu inclus tester.php ( à moins que lui même qoit inclus dans un fichier commencant par session_start()...)

voila ! bon courage icon_biggrin.gif
clic4
Ok, merci bien amoss pour tes réponses. Je me sens moins seul avec mon problème ridicule wink.gif

Pourtant, je suis toujours bloqué. icon_neutral.gif

En ce qui concerne l'assignation d'une valeur à ma variable session, je fais bien quelque chose du genre $_SESSION['maVariable']='truc' dans le fichier appelé par l'include. Mais si j'ai bien compris le système des sessions, dès que je fais session_register('maVariable') je devrais créer une variable (avec rien dedans) et la fonction session_is_registered('maVariable') devrait quand même me retourner true...

Pour le session_start() au début du script c'est pareil, j'ai déjà essayé de le placer avant l'include mais rien n'y fait.

Je ne pense pas que mon souci se situe à ce niveau car tout marche parfaitement lorsque j'utilise un chemin relatif dans l'include alors que tout foire dès que j'emploie un chemin absolu du sytle http://localhost/monSite/ (cf. mon dernier mail).
J'ai essayé une adresse relative du style "/monSite/" mais là je reçois une erreur comme quoi le répertoire n'existe pas.. Comprends pas, "/" n'est-il pas sensé faire référence à la racine du site ??

Je commence à me demander si ce n'est pas propre à la configuration de mon serveur. Je vais faire un test sur le site pour voir si j'ai le même problème. D'ici là, je suis ouvert à tout commentaires/suggestions/propositions ou toute marque d'intérêt wink.gif

Clic4
Thanh
yO,

lorsque tu utilises les sessions, elles sont prises en charge pour une "session" de navigateur.

Pour utiliser ton compteur tu dois passer par un chemin physique par rapport à l'arborescence de tes scripts(relatif avec ../ ou absolue avec $_SERVER["DOCUMENT_ROOT"]) et non via http. Pk? car dans le cadre d'un appel via http tu n'est pas dans un contexte navigateur c'est à dire que tu ne peux pas créer de session courante (ex avec Google ou une appli passant par socket). Donc à chaque fois le compteur est incrémenté car il n'a pas de trace possible d'un précédent passage.

J'ai essayé d'expliquer en français. Sorry si c'est un peu obscur smile.gif

Ensuite,

- session_start() doit toujours se situer une fois et une seule dans la page et tout au début de script, du moins avant tout envoi de header
- n'utilises plus session_register mais $_SESSION["variable"] =

bon courage.
clic4
Aaaah voilà qui sonne juste à mes oreilles ! icon_biggrin.gif

Grand merci pour ton aide et ces explications claires et logiques.
Je vais tout de suite les mettre en pratique (en fait je connaissais pas encore $_SERVER["DOCUMENT_ROOT"] ).

Quant à la non-utilisation de session_register(), j'étais pas au courant (bon, je connais les sessions que depuis 3 jours alors...).

Merci encore !


Clic4
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.