Discussion:
Sessions, header et safe mode ?
(trop ancien pour répondre)
Jean-Francois Ortolo
2008-05-27 13:43:06 UTC
Permalink
Bonjour

Dans quelques scripts de mon site, j'ai mis en place une session
basique, pour voir si ça marche et transmettre des variables de session.

Mon site a un serveur mutualisé qui a le Safe Mode à On.

D'autre part, mon site utilise l'instruction header, pour rediriger
vers d'autres scripts de mon site. C'est mal je sais, mais c'est la
seule manière dont je dispose pour dépasser la limite maximale
d'exécution de mes scripts, fixée par l'hébergeur à 20 secondes.

La session est donc déclenchée avec session_init() en début de
script, et il y a des header en fin de script.

Le PHP Manual, indique que l'instruction header, nécessite de ne pas
afficher ou envoyer aucune donnée vers le client, pour que l'instruction
header puisse s'exécuter. Mais il nementionne pas le problème des
headers et des sessions.

Les header et les sessions sont-ils compatible ?

Merci beaucoup de vos réponses.

J'ai constaté que le trafic de mon site a tendance à baisser, je me
demande s'il n'y a pas comme un bug dans son exécution, à cause des
sessions.


D'un autre côté, si mon site devient payant ( à terme ), je serai bien
obligé d'utiliser les sessions si je veux disposer du package qui me
sera fourni par mon intermédiaire de paiement.

Bien à vous.

Amicalement.

Jean-François Ortolo
Olivier Miakinen
2008-05-27 14:27:52 UTC
Permalink
Post by Jean-Francois Ortolo
Le PHP Manual, indique que l'instruction header, nécessite de ne pas
afficher ou envoyer aucune donnée vers le client, pour que l'instruction
header puisse s'exécuter. Mais il nementionne pas le problème des
headers et des sessions.
Les header et les sessions sont-ils compatible ?
Oui, puisque tout ceci fait partie des entêtes HTTP. Le premier octet
de contenu force à envoyer d'abord les entêtes suivis d'une ligne vide,
mais tant que le premier octet n'est pas envoyé on peut continuer à
définir d'autres entêtes (y compris pour définir une session).

Note que la bufferisation des données permet en outre de contourner
cette limitation. Cf. la FAQ : <http://faqfclphp.free.fr/#rub2.12>.
Jean-Francois Ortolo
2008-05-27 20:58:33 UTC
Permalink
Post by Olivier Miakinen
Oui, puisque tout ceci fait partie des entêtes HTTP. Le premier octet
de contenu force à envoyer d'abord les entêtes suivis d'une ligne vide,
mais tant que le premier octet n'est pas envoyé on peut continuer à
définir d'autres entêtes (y compris pour définir une session).
Note que la bufferisation des données permet en outre de contourner
cette limitation. Cf. la FAQ : <http://faqfclphp.free.fr/#rub2.12>.
Bonjour Monsieur

Merci beaucoup de votre réponse.

Mais... La session est ouverte avec session_init() au début du
script, et le header de redirection avec header("Location: .$url),
figure à la fin du script.

Le header de redirection va-t-il s'exécuter, sachant que la session a
déjà été ouverte ( et même refermée juste avant la redirection, pour
faire bonne mesure ).

Si le fait de déclencher session_init() envoie quoi que ce soit au
navigateur client, comment le header peut-il s'exécuter, si rien ne doit
avoir été envoyé au client, pour que le header s'exécute ?

Merci beaucoup.

Bien à vous.

Amicalement.

Jean-Francois Ortolo
Olivier Miakinen
2008-05-27 21:14:07 UTC
Permalink
Bonjour,
Post by Jean-Francois Ortolo
Mais... La session est ouverte avec session_init() au début du
script,
Je suppose que tu voulais dire « session_start() ».
Post by Jean-Francois Ortolo
et le header de redirection avec header("Location: .$url),
figure à la fin du script.
Si tu n'envoies aucun octet de donnée, il n'y a pas de raison que ça ne
fonctionne pas.
Post by Jean-Francois Ortolo
Le header de redirection va-t-il s'exécuter, sachant que la session a
déjà été ouverte ( et même refermée juste avant la redirection, pour
faire bonne mesure ).
Si le fait de déclencher session_init() envoie quoi que ce soit au
navigateur client, comment le header peut-il s'exécuter, si rien ne doit
avoir été envoyé au client, pour que le header s'exécute ?
Que les sessions soient gérées par cookie ou par url, session_start()
n'a strictement aucune raison d'envoyer le moindre octet dans la partie
« données » (c'est-à-dire en dehors des entêtes).

Cela étant dit, je n'ai jamais utilisé les sessions, et si tu doutes tu
peux toujours faire l'essai.
Jean-Francois Ortolo
2008-05-28 15:29:20 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Jean-Francois Ortolo
Le header de redirection va-t-il s'exécuter, sachant que la session a
déjà été ouverte ( et même refermée juste avant la redirection, pour
faire bonne mesure ).
Si le fait de déclencher session_init() envoie quoi que ce soit au
navigateur client, comment le header peut-il s'exécuter, si rien ne doit
avoir été envoyé au client, pour que le header s'exécute ?
Que les sessions soient gérées par cookie ou par url, session_start()
n'a strictement aucune raison d'envoyer le moindre octet dans la partie
« données » (c'est-à-dire en dehors des entêtes).
Cela étant dit, je n'ai jamais utilisé les sessions, et si tu doutes tu
peux toujours faire l'essai.
Bonjour Monsieur

Je croyais que les cookies faisaient partie des données.

Je vous prie de m'excuser pour mes questions stupides.

Effectivement, j'ai testé sur mon site, ça marche, ouf.

J'ai eu peur qu'il y ait un bug que je n'aurais pas vu.

Merci beaucoup pour votre réponse.

Bien à vous.

Jean-François Ortolo

Continuer la lecture sur narkive:
Loading...