Je ne pense pas que ce soit raisonnable. P>
Pourquoi est-ce en fait une telle règle? P>
5 Réponses :
dans l'affaire " normale em>", je ne pense pas citant le page manuelle de session_start () enregistrera interne
gestionnaire de sortie pour la réécriture de l'URL lorsque
TRANS-SID est activé. Si un utilisateur utilise
ob_gzhandler ou comme avec ob_start (),
L'ordre du gestionnaire de sortie est
important pour la sortie appropriée. Pour
Exemple, l'utilisateur doit s'inscrire
ob_gzhandler avant le début de la session. p>
blockQuote>
Mais c'est une sorte de cas spécial: la chose est, ici, que l'ordre des gestionnaires de sortie est important: si vous voulez qu'un gestionnaire de modifier les choses que l'autre ait fait, ils doivent être exécutés dans le "droit" ordre. p>
et les en-têtes sont envoyés dès que toute autre donnée doit être envoyée - c'est-à-dire dès qu'il y a une sortie, même une personne à l'extérieur de Remarque: Si vous utilisez une cookie basée sur la cookie
Sessions, vous devez appeler
session_start () avant tout ce qui est
sortie sur le navigateur. P>
blockQuote>
Cette fonction va tourner la sortie
tampon sur. Alors que la mise en mémoire tampon de sortie
est actif aucune sortie n'est envoyée de la
script (autre que les en-têtes), à la place
La sortie est stockée dans un interne
tampon. p>
blockQuote>
De cette façon, la sortie n'est pas envoyée avant de dire vous-même, " envoie les données em>". Cela signifie que les en-têtes ne sont pas envoyés immédiatement - ce qui signifie ob_start code> doit être appelé avant
session_start code> - ni l'autre solution . p>
session_start code>
, bien que: p>
Généralement, si vous n'utilisez pas ce type de manutention (apache et mod_deflate code>
fait un excellent travail en matière de compression de la sortie, par exemple) em>, la seule chose qui compte est que les en-têtes ne doivent pas être envoyés avant d'appeler session_start code> (car, selon votre configuration,
session_start code> envoie des cookies, passés en en-têtes HTTP) EM>. P>.
PHP?> Code> Tags: < / p>
ob_start code> indique que PHP doit tamponner les données: p>
session_start code> peut être appelé ultérieurement, même s'il aurait dû être sorti, si
ob_start code> n'avait pas été utilisé. P>
J'espère que cela rend les choses un peu plus claires ... em> p>
Si par défaut, votre sortie_buffering > est
OFF code> et vous avez été assez malheureux pour envoyer un seul octet de données au client, puis votre
http code > Les en-têtes ont déjà été envoyés. Qui empêche efficacement
session_start () code> de passer l'en-tête de cookie au client. En appelant
ob_start () code> Vous activez la mise en mémoire tampon et donc retarder l'envoi d'en-têtes HTTP. P>
Modification de l'en-tête HTTP nécessite qu'il n'y ait aucune sortie déjà envoyée au client comme le HTTP Header est envoyé juste avant l'envoi de la première sortie. P>
Vous assurez soit qu'il n'y a absolument pas de sortie avant l'appel de session_start code> peut vouloir modifier l'en-tête HTTP si certaines options de configuration sont définies. Un exemple est session.use_cookies em> qui nécessite de définir / modifier le champ d'en-tête Cookie em>. p>
session_start code>. Ou vous utilisez le Contrôle de la mémoire tampon de sortie pour tamponner la sortie de sorte que le L'en-tête HTTP peut être modifié même s'il est déjà sorti. P>
Par exemple, l'utilisateur doit enregistrer Mais c'est une sorte de cas particulier. La chose est, ici, que l'ordre des gestionnaires de sortie est important. Si vous voulez un gestionnaire pour modifier les choses de l'autre ont fait, ils doivent être exécutés dans l'ordre « droit ». P>
En général, si vous ne pas utiliser ce genre de gestionnaires (Apache et et les en-têtes sont envoyés dès que toute autre donnée doit être envoyée - c'est-à-dire dès qu'il y a une sortie, même une personne à l'extérieur de Remarque:. Strong> Si vous utilisez des sessions basées sur les cookies, vous devez appeler Cette fonction allumera la mise en mémoire tampon de sortie. Lorsque la mémoire tampon de sortie est active, aucune sortie n'est envoyée du script (autre que les en-têtes), la sortie est stockée dans un tampon interne. P>
De cette façon, la sortie n'est pas envoyée avant de dire vous-même, "envoyer les données". Cela signifie que les en-têtes ne sont pas envoyés immédiatement - ce que signifie session_start peut être appelé plus tard, même s'il aurait dû être sorti, si session_start () code> enregistrera le gestionnaire de sortie interne pour la réécriture d'URL lorsque
trans-sid code> est activé. Si un utilisateur utilise
ob_gzhandler code> ou similaire avec
ob_start () code>, l'ordre du gestionnaire de sortie est important pour une sortie appropriée. p>
ob_gzhandler code> avant le début de la session. p>
mod_deflate code> faire un excellent travail en matière de compression de sortie, par exemple), la seule chose qui importe est que les en-têtes doivent Ne pas être envoyé avant d'appeler
session_start code> (car, en fonction de votre configuration,
session_start code> envoie des cookies, passés en en-têtes HTTP). P>
PHP?> Code> Tags: < / p>
session_start () code> avant tout est émis au navigateur p>
ob_start code> indique que PHP doit tamponner les données: p>
ob_start code> n'avait pas été utilisé. P>
session_start (); devrait être appelé avant que tous les en-têtes soient envoyés. ob_start () supprimera la sortie pendant un moment et vous pouvez casser cette règle. Généralement ob_start () sur le dessus est une solution rapide au cas où vous déboguerez quelque chose d'inconnu; Tout ce qui est ci-dessous fonctionne comme prévu (non seulement comme écrit ;-)). Je préfère utiliser ob_start () plus tard à session_start (). P>
Franchement parler: Je n'ai pas entendu parler de cette règle!