[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. 8O
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 !!! :D :D
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 ?? :D :D
session_set_save_handler : fonctionne pas
Merci encore wamania pour les infos !!! :D :D :D
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 !!! :D :D :D
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 !!! :D
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 :oops: ... -quel boulet !!!- 8O
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... :D :D