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 12/04/2006, 11h49   #1
Invité régulier
 
Inscription : janvier 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 26
Points : 6
Points : 6
Par défaut [Sécurité] session_set_save_handler : fonctionne pas

Bonjour,

Pour accroitre la securite sur mon site, j'ai redefini les actions relatives aux sessions pour pouvoir stocker les donnees de session dans mysql :

dans le fichier sessions.inc.php :
Code :
1
2
3
4
5
 
...definition des fonctions _open, _close, _read, _write...
 
ini_set("session.save_handler", "user");
session_set_save_handler('_open', '_close', '_read', '_write', '_destroy', '_clean');
Pour tester si cela fonctionne bien, j'ai fait dans un fichier test :
Code :
1
2
3
4
5
6
7
8
<?php
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
include_once($DOCUMENT_ROOT.'/Prot/sessions.inc.php');
session_start();
$foobar = "toto";
$_SESSION['foobar'] = $foobar;
echo $_SESSION['foobar'];
?>
Apparemment, je devrai donc voir dans ma base de donnees la variable de session foobar avec le contenu toto car je suppose que lorsque je fais :
Code :
$_SESSION['foobar'] = $foobar;
la fonction _write (ajoute la donnee a la session) est appelee.
Et ce n'est malheureusement pas le cas.
Ce qui est etonnant, c'est que les fonctions _open, _read sont bien appelees (et que session_set_save_handler retourne TRUE)...

Donc ma question :

Comment fait-on pour ecrire une variable de session quand on a modifie le comportement de gestion des sessions avec session_set_save_handler ?

Si quelqu'un a une idee a propos d'une solution pour ce probleme, je suis preneur !!!

Merci !!!
aurel89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 13h15   #2
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
session_register('nom', $valeur);
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 13h29   #3
Invité régulier
 
Inscription : janvier 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 26
Points : 6
Points : 6
Par défaut session_set_save_handler : fonctionne pas

Merci wamania pour l'idee.

Malheureusement, cela ne fonctionne toujours pas !
J'ai teste avec ceci :
Code :
1
2
3
4
5
6
7
 
session_register('foobar', 'toto');
if ( isset($_SESSION['foobar'])) {
  echo $_SESSION['foobar'];
} else {
  echo 'unregistered var.';
}
Et cela me retourne 'unregistered var'. Donc la fonction _write ne fonctionne pas.

Pour trouver l'erreur, j'ai alors essaye :
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
 
<?php
  	function _open()
	{
		echo '-open';
		return 1;
	}
 
	function _close()
	{
		echo '-close';
		return 1;
	}
 
	function _read($id)
	{
		echo '-read';
		return '';
	}
 
	function _write($id, $data)
	{
		echo '-write';
		return 1;
	}
 
	function _destroy($id)
	{
		echo '-destroy';
		return 1;
	}
 
	function _clean($max)
	{
		echo '-clean-';
		return 1;
	}
 
	@session_destroy();//just in case
	ini_set("session.save_handler", "user");
	if ( !session_set_save_handler('_open', '_close', '_read', '_write', '_destroy', '_clean') ) {
		echo 'pas ok';
	}
?>
Et quand je cree le fichier de test suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
<?php 
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
include_once($DOCUMENT_ROOT.'/Prot/sessions.inc.php'); 
session_start(); 
session_register('foobar', 'toto');
if ( isset($_SESSION['foobar'])) {
  echo $_SESSION['foobar'];
} else {
  echo '-unregistered var.';
}
?>
J'obtiens uniquement la trace suivante :
-open-read-unregistered var.

Une idee ??
aurel89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 13h44   #4
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
hehe
le callbacks est appelé une fois que ton buffer de sortie est vidé. Ce qui veut dire qu'on ne PEUT PAS afficher qq chose par la fonction _write()
Ce qui veut dire aussi qu'il ne faudra pas utiliser dans ta page une variable de session enregistrée dans la meme page.
exemple:
<?php
$_SESSION['jone'] = 'smith';
echo $_SESSION['jone']; // affiche rien
?>

r'appelle ta page et la, t'affichera Smith.
Plus d'infi
http://www.phpbuilder.com/manual/en/...ve-handler.php
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 13h47   #5
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
ou sinon, essaie pour visualiser la bonne execution de tes fonctions, de créer un fichier PHP séparé contenant
que tu pourras appeler à la fin de chaque script que tu veux tester
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 15h23   #6
Invité régulier
 
Inscription : janvier 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 26
Points : 6
Points : 6
Par défaut session_set_save_handler : fonctionne pas

Merci encore wamania pour les infos !!!

Tes quelques conseils ont eclaire le movice que je suis et ont permi de cerner un peu mieux le probleme : c'est la fonction _write qui semble ne pas bien s'executer.

En effet, selon tes conseils, j'ai cree un fichier texte dans lequel sont ecrites les donnees de session :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
	function _write($id, $data)
	{
		$id = mysql_real_escape_string($id);
		$data = mysql_real_escape_string($data);
 
		Fnm = "suivi.txt";
		$inF = fopen($Fnm,"a");
		fwrite($inF,'['.$id.':'.$data.']');
		fclose($inF);		
 
		//... add session data to mysql
 
		return 1;
 
	}
Maintenant, quand je teste avec :
Code :
1
2
3
4
5
6
7
 
<?php
	$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
	include_once($DOCUMENT_ROOT.'/Site/sessions.inc.php');
	session_start();
	$_SESSION['foobar'] = 3;
?>
le fichier texte suivi.txt contient l'identification de session, mais prien concernant la variable de session foobar !!! (le fichier contient seulement [605d522e94d4618ed4a1295170bd6f7a:])

Peut-etre ais-je mal configure quelque chose ?

En tous cas, merci wamania pour tes conseils !!!
aurel89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2006, 14h10   #7
Invité régulier
 
Inscription : janvier 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 26
Points : 6
Points : 6
Par défaut session_set_save_handler : fonctionne pas

Bonjour,

Ca y est, j'ai trouve le petit probleme concernant la fonction _write.

Par contre, ce qui est etonnant, c'est que je dois inclure dans toutes mes pages utilisant les donnees de la session :
Code :
1
2
3
4
 
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; 
include_once($DOCUMENT_ROOT.'/Site/sessions.inc.php'); 
session_start();
Sinon, les donnees de la session sont perdues quand je change de page bien qu'appelant session_start() ...

Je pensais que la fonction session_set_save_handler ne devait etre executee qu'une seule fois et qu'apres, plus besoin de la rappeler !!!
Mais cela me semble tres bizarre.

Suis-je dans l'erreur ou faut il bien appeler session_set_save_handler a chaque fois que l'on veut utiliser les donnees de la session ???

Si quelqu'un peut m'eclairer sur la bonne demarche a mettre en oeuvre, je suis preneur !!!
Merci !!!
aurel89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2006, 14h40   #8
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
Citation:
Ca y est, j'ai trouve le petit probleme concernant la fonction _write
C'était quoi alors?
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2006, 15h15   #9
Invité régulier
 
Inscription : janvier 2005
Messages : 26
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 26
Points : 6
Points : 6
Par défaut session_set_save_handler : fonctionne pas

Il s'agissait juste d'une requete mysql qui plantait du fait que j'avais oublie de mettre les caracteres d'echappement... Aussi stupide que cela ... -quel boulet !!!-

A present, je me demande donc s'il est normal ou non d'appeler session_set_save_handler dans tous les scripts utilisant les sessions.
A priori, un seul appel a session_set_save_handler pour initialiser le nouveau "modele" de gestion des sessions, puis on peut utiliser session_start comme par defaut. Ce qui semblerait etre logique. Mais cela ne fonctionne malheureusement pas : en effet je suis oblige d'appeler session_set_save_handler puis session_start dans tout mes scripts pour pouvoir acceder aux donnees de la session... Peut-etre que cela vient du fait que je sois oblige de faire un appel a ini_set("session.save_handler", "user"); car ne pouvant modifier le php.ini ???

Si quelqu'un a une info...
aurel89 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2006, 16h54   #10
Rédacteur
 
Avatar de wamania
 
Développeur Web
Inscription : juillet 2003
Messages : 676
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juillet 2003
Messages : 676
Points : 678
Points : 678
Citation:
A present, je me demande donc s'il est normal ou non d'appeler session_set_save_handler dans tous les scripts utilisant les session
s

je pense que oui, car sinon, on tourne en rond, il faut les session pour garder la config, il faut la config pour accéder à la session.

comme si tu mettais tes variables de connexion à mysql dans ta base....
wamania est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h12.


 
 
 
 
Partenaires

Hébergement Web