Problème lecture fichiers de session

Bisvan2
Invité n'ayant pas de compte PHPfrance

08 nov. 2011, 12:09

Bonjour tout le monde,


J'ai réalisé un petit site avec accès membre que je gère avec un espace d'administration.
J'aimerai dans mon admin afficher le nombre de membres connectés en "live" et le nom de ceux-ci (qu'ils rentrent lorsqu'ils se connectent à leur compte).

Pour tester déjà le nombre de connecté en "live" j'ai utilisé ce script :
  if ( $d = opendir( session_save_path()  )  ) {
        $count = 0;
        $session_timeout = 3 * 60;
        while ( false !== ( $file = readdir( $d )  )  ) {
            if ( $file != '.' && $file != '..' ) {
                if ( time()- fileatime(session_save_path() . '/' . $file) < $session_timeout ) {
                      $count++;
                }
            }
        }
    }
    echo $count;
Mais en testant j'ai l'erreur suivante :
Warning: opendir() [function.opendir]: open_basedir restriction in effect. File(/var/lib/php/session) is not within the allowed path(s): (/var/www/vhosts/monsite.fr/httpdocs/:/tmp/) in /var/www/vhosts/sushisakura.fr/httpdocs/test/admin/menu.php on line 201
Je sais que c'est dû à une variable du php.ini qui bloque par sécurité la lecture du dossier de session, mais sauriez vous quelle ligne mettre dans mon fichier de conf php afin que je puisse y accéder ?

Merci beaucoup !

ViPHP
ViPHP | 2577 Messages

08 nov. 2011, 12:35

Bonjour,

Si tu cherche "/var/www/vhosts/monsite.fr/httpdocs/:/tmp/" dans php.ini, tu devrais pouvoir trouver la ligne à modifier.

Bisvan2
Invité n'ayant pas de compte PHPfrance

08 nov. 2011, 12:40

Merci mais je pense qu'il ne faut pas que je modifie cette ligne mais que j'en rajoute une avec un autre chemin ?
Car cette ligne fait appelle à un dossier /tmp déjà utilisé non ?

ViPHP
ViPHP | 2577 Messages

08 nov. 2011, 12:58

Moi je vois bien remplacer la valeur par :
/var/www/vhosts/monsite.fr/httpdocs/:/tmp/:/var/lib/php/session

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 nov. 2011, 15:28

hum le problème est plus "profond" que cela : qu'est ce que tu va en faire des fichiers de session ?

perso je ne sais pas ce qu'il y a dedans et même en ouvrant un je pige pas la structure. bon y a surement moyen de savoir comment c'est fait.

tu va donc parcourir tous le répertoire, lire le contenu de tout les fichiers, les analyser et ensuite afficher les gens connecté ?

c'est pas viable, a mon avis, gourmand en ressource pour pas grand chose au final.
tu ne peux être sur du nombre de personnes connectées sur le site car la session expire au bout d'un certain temps et tu ne peux pas savoir si le gars au bout a laisser la page web ouverte et s'est barré, s'il reste pendant 3 plombes devant la page, s'il a fermé la page.

en général on utilise une table ou un champ de table pour cela.
par exemple une table
id
idMembre
dateconnection

Tu ajoute une tite requête qui vire ceux qui ont plus de X secondes / minutes et ensuite tu lis la table pour avoir les gens connecté.

lors de l'affichage des pages d'un membre il faut tu fasse un update de cette table de temps en temps (pourquoi pas avec un cookie qui stock la dernière date et si dépassé tu update. (y surement mieux a faire ^^)

@+
Il en faut peu pour être heureux ......