Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 23h47   #1
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 87
Points : 37
Points : 37
Par défaut Sessions qui ne fonctionnent pas

Bonjour à tous,

J'ai un serveur Windows que je viens de mettre à jour de Apache 2/PHP 4.4/MySQL 5.0 à Apache 2.2/PHP 5.2.17/MySQL 5.1.

J'utilise une configuration dans le php.ini standard et tout semble fonctionner correctement. Le seul truc c'est que sur mon site j'ai un problème particulier : Les sessions disparaissent !!

J'ai fait une page simple de test comme suit :
Code :
1
2
3
4
5
6
<? 
session_start();
 
$_SESSION["test"] = $_SESSION["test"] . "-";
echo $_SESSION["test"];
?>
Normalement, ma sortie devrait être une série de tiret de plus en plus longue à chaque chargement de la page (sans fermer le navigateur).
Or là, je me retrouve à chaque fois avec un seul et unique -
J'ai aussi essayé de faire une incrémentation... genre :
Code :
1
2
3
4
5
6
7
8
9
<? 
session_start();
 
if ( !isset($_SESSION["number"]) ) {
  $_SESSION["number"] = 0;
}
$_SESSION["number"] = int_val($_SESSION["number"]) + 1;
echo $_SESSION["number"];
?>
Idem... j'ai toujours un désespérant 1

(Info : J'ai testé ces codes sur un autre serveur avec succès )

En cherchant un peu, beaucoup, désespérément... j'ai rien trouvé
Merci à ceux qui auraient une idée/piste à me soumettre

Configuration partiel du php.ini (Commentaires en moins...) :
Code :
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
y2k_compliance = On
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
variables_order = "GPCS"
request_order = "GP"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
extension_dir = "D:/Apache_PHP/PHP5.2/ext"
enable_dl = On
file_uploads = On
upload_max_filesize = 32M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_mysql.dll
extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
extension=php_pdo_mysql.dll
extension=php_zip.dll
 
[Session]
session.save_handler = files
session.save_path = "D:/Apache_PHP/PHP5.2/sessions"
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.entropy_length = 0
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
Te-Deum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 01h52   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
avec firebug ou consort est ce que tu vois passer les entete set-cookie qui servent à apprendre à ton navigateur quelle est la valeur du coockie...

ensuite il est possible de voir le fichier log ?

Code ini :
1
2
3
4
5
6
7
error_reporting = E_ALL & ~E_NOTICE ; grave erreur à mon avis.;   Development Value: E_ALL | E_STRICT recommandation php 5.3
display_errors = On
display_startup_errors = Off ; tu devrais essayer aussi.
log_errors = On 
session.save_path = "D:/Apache_PHP/PHP5.2/sessions" ; un petit dir sur ce repertoire donne quoi?
; je vois pas ceci ... à la sauce windows
; error_log = /var/log/php/errors.log

php déteste qu'on emette des caractères "invisibles" (au mieux des retours à la ligne, des espaces ... ) avant un session_start. regarder tes erreurs avec les avertissements au max t'apprendra bcp de choses.

au fait, je veux pas être méchant metre a jour une version obsolete par une autre version obsolette de php... quitte a changer de langage... (php 4 != php 5.x )

astuce: ceci est inutile dans bien des cas ...
et ceci est déprécié
en faveur de
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 13h32   #3
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 87
Points : 37
Points : 37
Salut et merci pour ton message,

Citation:
Envoyé par gene69 Voir le message
avec firebug ou consort est ce que tu vois passer les entete set-cookie qui servent à apprendre à ton navigateur quelle est la valeur du coockie...
Alors dans Firebug, j'ai le plugin pour les Cookies et j'ai bien un cookie avec ceci :
Citation:
PHPSESSID=fr3i7tl6jf278f0c9dsnlt55d3; path=/; domain=www.mondomaine.fr
Je navigue sur le site et le cookie reste bien avec la même valeur alors même que les variables de session ne sont pas conservées/transmises lors de la navigation.
J'ai vérifié sur le serveur (dans le répertoire de stockage des cookies) et le fichier de session existe bien (sess_fr3i7tl6jf278f0c9dsnlt55d3).

Citation:
Envoyé par gene69 Voir le message
ensuite il est possible de voir le fichier log ?
Le fichier de log ne se remplit pas... j'ai essayé de modifié error_log mais si je mets une valeur pour ce paramètres, le serveur ne démarre plus

J'ai modifié les paramètres du php.ini pour avoir les retours d'erreurs (E_ALL | E_STRICT) mais aucune erreur ne remonte depuis la page de test sans que cela ne fonctionne pour autant.

Citation:
Envoyé par gene69 Voir le message
au fait, je veux pas être méchant metre a jour une version obsolete par une autre version obsolette de php... quitte a changer de langage... (php 4 != php 5.x )
Je suis d'accord avec toi mais PHP 5.3 ne fonctionne pas avec Apache sur Windows. Il faut installer Apache Lounge pour que cela fonctionne et je n'ai pas la volonté de le faire tout de suite et je ne suis pas sur que cela résolve mon soucis...

Sinon concernant les balises d'ouvertures/fermetures de code PHP (<?, <?php, ?>) on chipote un peu mais tu as tout a fait raison... comme j'ai tapé ce code manuellement lors de la rédaction de mon post, je n'avais pas Eclipse pour automatiquement ajouté le php à la suite du <?. Les mauvaises habitudes ont un bel avenir avec de tels outils

Si vous avez d'autres piste... je suis preneur...
Te-Deum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 13h38   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
bonjour

on m'a donc menti... http://www.apachefriends.org/en/xampp-windows.html

si tu developpes avec eclipse, j'imagine que tu n'as pas de caractères "affiché" avant session_start()

tu as fait des tests de fonctionnement de $_SESSION avec uniquement ton code dans un fichier test complètement décorélé de tout le reste?
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 13h47   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Si tu détruits le cookie sur le serveur, ton fichier de log devrait obligatoirement s’incrémenter d'une Notice sur le thème $_SESSION['blablabla'] non initialisée... et la notice y sera quelque soit la version de php.

tant qu'on n'a pas ça, tu peux avoir un objet serialisé dans $_SESSION qui hérite de ArrayObject ou qui implemente ArrayAccess avec une surcharge de __toString().

là je passe en mode complot
fait des var_dump($_SESSION); au lieu de echo $_SESSION["test"];
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 13h52   #6
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
au fait j'ai une explication pour ta session ne fonctionnant pas pour ton incrémentation. Suit les conseils prodigués lors du 1ere commentaire, active les log à fond et tu verras.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h08   #7
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 87
Points : 37
Points : 37
Salut,

J'ai été interpellé par cette remarque :
Citation:
Envoyé par gene69 Voir le message
tu as fait des tests de fonctionnement de $_SESSION avec uniquement ton code dans un fichier test complètement décorélé de tout le reste?
Si je vire le reste du site (Agora-Project) et que je garde uniquement test.php, les sessions fonctionnent alors correctement !
Si je remet le site en place, les sessions sont immédiatement perdues

Je vais donc tout virer et remettre les dossiers/fichiers 1 à 1 afin de trouver qui pose problème.

Je n'arrive pas à faire fonctionner les logs !? Ca empeche Apache de démarrer... Je commence à me demander si je ne devrai pas ré-installer le serveur "from scratch".

Merci à toi

PS : Concernant Xampp, j'avoue ne pas avoir d'explication... J'ai lu un peu partout qu'Apache pour Windows n'était compatible qu'avec PHP VC6 et non VC9... Comme je n'arrivais pas à configurer PHP 5.3 VC9 sur Apache 2.2, je me suis reporté sur PHP¨5.2 et là miracle ça a fonctionné du premier coup.
Te-Deum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h14   #8
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
c'est des allemands qui font ça ... ça se trouvent ils recompilent chez eux.

un fichier independant, sans ref à un autre ou au bootstrap devrait fonctionner tout seul meme si le reste du code est présent

sauf si ya des includes "magiques"...

pour voir la magie à l'oeuvre
http://us2.php.net/manual/en/functio...nned-files.php
http://us2.php.net/manual/en/function.ini-get-all.php
http://us2.php.net/manual/en/functio...uded-files.php
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h16   #9
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
mais t'a raison la priorité numéro 1 c'est d'avoir des logs qui fonctionnent pour voir la belle fonction inconnue "int_val()"
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 14h53   #10
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 87
Points : 37
Points : 37
Re,

Bon, j'ai avancé sur l'origine de mon problème... voici ce qui se passe : Lorsque je charge une page sur mon site, le fichier index.php (à la racine du site) est automatiquement appelée et c'est ce fichier qui réinitialise la session !

Les fonction que tu cites me renvoient :
- get_icluded_files() : D:\Site_Web\wwwroot\agora\test.php (Mon fichier de test)
- php_ini_scanned_files() : Rien (Chaine vide)
- ini_get_all() : Ma configuration php.ini

J'avance... merci encore à toi pour ton aide

PS : Oui, c'est pas int_val() mais intval()
Te-Deum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h00   #11
Nouveau Membre du Club
 
Inscription : janvier 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 87
Points : 37
Points : 37
Bon... Ok... Honte sur moi

Le soucis provient de la configuration vhost d'Apache... il faisait de la réécriture d'URL dynamique.

J'ai trop trop honte de vous avoir fait perdre du temps sur une annerie pareil

Merci beaucoup pour votre aide qui m'a permis d'avancer car j'étais à 10000Km de la solution !
Te-Deum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h09.


 
 
 
 
Partenaires

Hébergement Web