Probleme de droits d'ecriture des fichiers sessions dans /tmp

Probleme de droits d'ecriture des fichiers sessions dans /tmp - PHP - Programmation

Marsh Posté le 14-12-2004 à 17:12:07    

Bonjour, petit probleme de sessions...
Voila je bosse sur un site qui possede un script en PHP qui sert a identifier les utilisateurs et qui fait un session_start() au debut. Le fichier de sessions est enregistre sur un serveur dans /tmp qui possede les droits en ecriture et lecture pour tout le monde. Par contre ce serveur est divisé en plusieurs petits serveur representant des groupes d'utilisateur.  
Lors de l'execution du script sur une page presente sur le serveur du groupe A, le fichier session appartient a cet utilisateur A (droit lecture ecriture pour l'utilisateur). Cependant, lors de la navigation sur le site, ce script peut etre relance par une page appartenant a un utilisateur B et du coup ce message d'erreur apparait :
 
Warning: session_start(): open(/tmp/sess_ef22ae8a8d88defec93ee4aa6184fdfb, O_RDWR) failed: Permission denied (13) in /.../soft/check_access_level.php on line 9
 
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /.../soft/check_access_level.php:9) in /.../soft/check_access_level.php on line 9
 
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /.../soft/check_access_level.php:9) in /.../soft/check_access_level.php on line 9
 
Warning: Unknown(): open(/tmp/sess_ef22ae8a8d88defec93ee4aa6184fdfb, O_RDWR) failed: Permission denied (13) in Unknown on line 0
 
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
 
(ligne 9 = session_start() )
 
A etant reconnu maintenant comme un utilisateur B, les session_start() ne peut pas modifier le fichier sess_... qui n'a les droits que pour un utilisateur A.
 
Yaurait-t-il un autre moyen d'empecher cette erreur que de mettre le fichier sess_... en mode lecture ecriture pour tout le monde par un chmod ? ce qui pour la securite laisse un peu a desirer.
 
Si on fait un session_destroy() quand on change de serveur, devra-t-on ressaisir son login/mot de passe a chaque fois ?
 
Ca fait que 1 mois que je touche au PHP donc je connais pas beaucoup toutes les subtilités. Et je prefere demander avant de me lancer dans une serie de tests qui me prendrait pas mal de temps.
 
Merci d'avance.

Reply

Marsh Posté le 14-12-2004 à 17:12:07   

Reply

Marsh Posté le 14-12-2004 à 18:23:49    

met au tout début de ton code: ob_start();
 
et tout a la fin: ob_end_flush();
 
Ca devrait résoudre une partie de tes erreurs.

Reply

Marsh Posté le 15-12-2004 à 09:28:01    

Oui en effet merci ca resout le probleme des headers, je sais pas comment, mais ca le fait lol!!
 
Enfin c'est surtout l'autre probleme le plus embettant dans ce que j'ai a faire :'(

Reply

Marsh Posté le 15-12-2004 à 13:42:36    

ob_start(); ne résout rien du tout là!
 
le open(); du session_start(); retourne une erreur, qu'il affiche. L'output commence à ce moment là, du coup apres, le output a déjà commencé et il ne peut plus envoyer les headers.
Donc si tu gère bien ton pb de session_start(); bah apres tu n'auras plus d'erreur d'output.

Reply

Marsh Posté le 15-12-2004 à 15:24:55    

Ouais le reste c'est que secondaire !! c'est le session_start() qui m'embette
 
Bon j'ai trouve un moyen c'est de faire un chmod 0660 du fichier de session dans le /tmp et la le fichier de session est accessible en lecture/ecriture par les groupes et les données peuvent etre mise a jour.  
Enfin je pense aussi que par ce systeme la securité c'est un peu moyen. Mais je vois pas comment faire autrement.
 
J'etais parti aussi sur l'idee de faire des tests sur les proprietaires, genre quand on passe de A à B, on fait un session_destroy() de A suivi d'un session_start() sous le statut de B, mais aps moyen d'arriver a recuperer le statut avant de faire un session_start() ce qui provoquera l'erreur avant.
 
quel Binz ce truc lol!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed