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 09/04/2007, 23h00   #1
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 4
Points : 4
Par défaut Sessions et Cgi

Bonjour,

Dans le cadre d'un projet web pour la licence informatique, nous devons réalisé un site d'annonce en ligne en php5 avec notament la possibilité de s'authentifier (utilisation des sessions) mais également d'uploader des images (donc besoin du droit d'écriture, et pour cela le professeur souhaite que notre contrôleur .php soit transformé en .cgi afin qu'il puisse avoir les droits du propriétaire pour écrire l'image uploadée dans un répertoire).

Les deux choses implémentées de manière séparée fonctionne :

1) Nous avons fait tout notre site avec des <?php session_start().... où aucun espace n'est envoyé au navigateur pour éviter toute erreur avec les headers. Pas de problème, ça marche.

2) Le script d'upload des fichiers fonctionne, mais pour le tester, nous avons dabord mis les droits d'écriture sur un répertoire pour pas s'embêter tout de suite avec les cgi.

3) On avait fait un tp auparavant où on a réalisé un système d'upload avec cgi et sans session et idem, ça fonctionnait.

Et voilà, qu'on décide de passer le contrôleur en .cgi
On ajoute en première ligne du fichier le #!/usr/lib/cgi-bin/php5
On ajoute le droit d'éxécuter par chmod 755
On ne fait pas de dos2unix, car on travaille sur unix de toute façon.

Après tout ça, les sessions ne fonctionnent plus. L'erreur indiqué, je pourrais vous la dire plus précisément demain (lorsque je retournerais à la fac) mais il me semble que c'était une erreur avec les headers. J'ai pensé que la première ligne #!/usr/lib/cgi-bin/php5 devait poser problème pour le session_start mais pour le prof, ça n'est pas ça le problème, pour lui cela devrait très bien fonctionner.

quelqu'un serait-il au courant d'une quelconque précaution supplémentaire à prendre lorsqu"on passe du php au cgi, ou bien d'une erreur qu'on aurait pu faire que le php nous a pardonné mais que le cgi ne pardonne généralement pas...
J'essaierais toutes les manoeuvres qu'on me proposera demain. Sauf modif de la config du php.ini du cgi dont je ne suis pas le propriétaire.

Merci d'avance !
Parkatm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2007, 09h42   #2
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 4
Points : 4
Pour + de précisions :
Voilà mon erreur :

Warning: session_start() [function.session-start]: open(/var/lib/php5/sess_fa7f71a06bd661a9b024b33e6d2794a4, O_RDWR) failed: Permission denied (13) in /users/etu/2007/l3/jsmit/public_html/devoirWeb/inscrit/index.cgi on line 22

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/etu/2007/l3/jsmit/public_html/devoirWeb/inscrit/index.cgi:22) in /users/etu/2007/l3/jsmit/public_html/devoirWeb/inscrit/index.cgi on line 22


Et voilà le début de mon code
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
 
#!/usr/lib/cgi-bin/php5
<?php 
 
/* ZONE INSCRIT */
/* ###################### INCLUSION DES FICHIERS ###################### */
require_once("../config/config.php");
require_once("../outils/fonctions.php");
require_once("../outils/autoload.php");
 
 
/* ###################### INITIALISATION DES VARIABLES ###################### */
// variables de contenu 
$titre = "";
$contenu = "";
// variables dépendant de la zone
$menuDroit = "../ui/templates/menuAbonne.frg.html";
$squelette = "../ui/affiche.html.php";
$zone="inscrit";
 
/* ###################  RÉINITIALISATION DE LA SESSION #################### */
session_name("jsmit");
session_start();
.........
La réponse de notre prof à ce problème :
Citation:
le session_start doit être placé avant tout envoi de contenu, mais il
peut y avoir 1000 lignes de code avant !

En tout cas en ce qui concerne les CGI, la première ligne d'un cgi est
celle qui permet de dire quel exécutable utiliser, donc ce n'est pas du
contenu envoyé au navigateur ! Par contre il faut que le PHP commence à
la ligne immédiatement après :
#!/usr/lib/cgi-bin/php5
<?php
require(......);
session_start();


Si ça ne marche pas le pb est ailleurs. Votre fichier est bien en
extension .cgi au moins ?
Parkatm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2007, 16h36   #3
Invité de passage
 
Inscription : avril 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 11
Points : 4
Points : 4
Problème résolu. Il s'agissait d'un conflit entre les sessions crées par www-data (par php) et celles crées par cgi. L'une n'ayant pas les droits pour lire les sessions crées par l'autre. Il faut donc que tous vos contrôleurs soient en cgi ou tous en php, bien effacer les cookies et les informations de session, tester le log.. Bref, une suite de manoeuvre allant dans ce sens.
Parkatm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h55.


 
 
 
 
Partenaires

Hébergement Web