Aller au contenu

PEAR::Auth - Problème de session_start()


Sujets conseillés

Posté (modifié)

Bonjour à vous !

Je me tourne vers vous car j'ai un problème carrément incompréhensible suite à des modifications de mon site.

Pour être honnête je ne sais pas d'où cela peut venir (peut-être du Vendredi 13 :whistling: )

En effet, ce matin j'étais en train de modifier mes pages (pour information, passer une variable normale en un tableau et les conséquences que cela entraine). Lors de mes tests tout marchait impeccable, et une fois que j'ai eu terminé, j'ai continué les mêmes tests que précédemment et j'ai obtenu une erreur.

Je m'apercevrai plus tard que le problème survient lorsque l'utilisateur visite la 2nde page du site (càd que sa session est créée et qu'il actualise la page).

Voici mon erreur :

[__autoload] Ce fichier n'existe pas : ./classes/ClassMDB2_Driver_Datatype_mysql.php

Ce message est issu de mon __autoload, il signifie qu'un objet MDB2_Driver_Datatype_mysql a tenté d'être créé et que la classe n'a pas été déclarée.

Je n'ai aucunement créé un objet de ce type dans mes scripts, et j'ai bien modifié mon php.ini pour le faire inclure les librairies PEAR (et le fichier MDB2/Driver/Datatype/mysql.php existe bien !).

J'ai donc essayé de voir d'où cela pouvait bien venir ... je suis arrivé jusqu'à ma classe "Membre" qui est étendue de la classe PEAR "Auth". Je l'utilise depuis le début du développement du projet (2 semaines) sans avoir jamais rencontré de problèmes.

Le problème vient plus précisément de l'appel au constructeur de Auth. J'ai donc rajouté des lignes de debug dans Auth.php et voici d'où vient exactement le problème :

// Start the session suppress error if already started
echo session_id();
if(!session_id()){
echo 'toto';
print_r($_SESSION);
session_start(); // <------------ Ici le problème !!!
echo 'tata';
print_r($_SESSION); // Affiche Array() la première fois
if(!session_id()) {
// Throw error
include_once 'PEAR.php';
PEAR::throwError('Session could not be started by Auth, '
.'possibly headers are already sent, try putting '
.'ob_start in the beginning of your script');
}
}
echo session_id(); // Affiche bien l'id de session la 1ère fois

Lorsque la page est générée une première fois, tout marche impeccablement bien. Si on l'actualise, les lignes de debug avant le "session_start()" sont bien exécutées, et celles après NON ! :mad2: Celaveut dire qu'on rentre bien (même une fois la session créée !!) dans le if(!session_id()) ... mais que le session_start() fait quelquechose de bizarre !

Je ne vois pas d'où cela peut venir, car le fichier de session est bien présent dans le dossier 'wamp/tmp' et si je le supprime, cela remarche.

Je veux bien débugguer mais là j'arrive à une ligne atomique sur laquelle je n'ai aucun contrôle ...

J'ai vraiment besoin de vos compétences pour m'aider à y voir plus clair dans mon problème et de votre expérience pour voir d'où cela peut venir !!

Merci d'avance à vous tous !

Modifié par real34
Posté

Bonjour,

A ce que je vois, personne ne semble inspiré par mon problème !

J'ai cherché et un jour (par miracle) cela a remarché. Cependant je ne comprends toujours pas pourquoi ! Aujourd'hui, cela replante ... même erreur, mêmes symptomes, tout pareil ! Je n'ai rien changé !!!!

Il me semble après d'autres suppressions de fonctionnalités (au fur et à mesure) que le problème pourrait venir d'une variable de Droits que je passe en session (dans mon objet Auth).

Voici ce que j'ai comme code lors de l'appel de ma méthode de callback onLogin() :

public function onLogin($username = null, &$auth = null)
{
$this->setAuthData('droits', new Droits($this->options_auth['dsn'], $this->getAuthData('droits')), true);
}

Cela crée un objet 'Droits' et le stocke dans une variable de session associée à Auth ...

Dans mon constructeur, j'ai ceci qui est exécuté la première fois (mais la seconde fois, cela plante avant !)

// Gestion des droits de l'utilisateur
if(!($this->getAuthData('droits'))){
// Construction des droits de l'utilisateur
if($this->getAuth()){
$this->setAuthData('droits', new Droits($dsn, $this->getAuthData('droits')), false);
} else {
$this->setAuthData('droits', new Droits($dsn), false);
}
}

Il semble que le problème vienne finalement d'un objet $mdb2 que je gardais dans mon instance de 'Droits' (en session).

J'en ai conclu qu'il valait mieux que je garde simplement le dsn de la connexion et que je la recrée à chaque fois !

Pensez-vous que le problème vienne vraiment de là ?? Est-il vraiment mauvais d'avoir un objet de type "ressource" de connexion à la bd dans un objet ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...