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 03/12/2006, 00h24   #1
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Par défaut redirection qui ne fonctionne pas

Bonjour à tous,

j ai le code suivant :

Code :
1
2
3
4
5
6
7
 
unset($_SESSION["commande"]);
 
if (!isset($_SESSION["commande"]))
{
	header("Location: http://www.lldiffusion.com/index.php?commande=null");
}
ma direction ne fonctionne pas et je ne comprends pas pourquoi...

pourtant ma session commande n'existe plus....
auriez-vous une idée...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 00h52   #2
Membre habitué
 
Inscription : mars 2003
Messages : 154
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 154
Points : 145
Points : 145
Envoyer un message via MSN à Orgied
Bonsoir,

le code que tu nous montres se trouve bien en début de page ? aucun print / echo n'est fait auparavant car si c'est le cas, ta redirection ne fonctionnera pas.

hormis ça, le code semble bon mais pas complet puisque je ne vois pas de session_start non plus.
Orgied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 09h14   #3
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
simple point de vue mais évite les redirections par header et apprécie les <meta /> c'est beaucoup plus simple
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 11h34   #4
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Je n'ai jamais eu de pbs avec les header, et ils te permettent de ne pas envoyer de html, donc tu as moins à envoyer (juste le header), et c'est quand même plus pratique...
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 12h07   #5
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Ma foi Frol, les headers sont tout de même un point crucial de PHP dans des appli WEB !!!!

Je ne vois pas comment tu peux faire autrement pour diriger vers une page selon certaines conditions.....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 14h11   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par frol
simple point de vue mais évite les redirections par header et apprécie les <meta /> c'est beaucoup plus simple
Je ne suis pas du tout d'accord. Header est fait pour ça, aucun intérêt d'utiliser les <meta>.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 14h12   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par sam01
Bonjour à tous,

j ai le code suivant :

Code :
1
2
3
4
5
6
7
 
unset($_SESSION["commande"]);
 
if (!isset($_SESSION["commande"]))
{
	header("Location: http://www.lldiffusion.com/index.php?commande=null");
}
ma direction ne fonctionne pas et je ne comprends pas pourquoi...

pourtant ma session commande n'existe plus....
auriez-vous une idée...
Rajoute un exit() après le header. C'est à faire systématiquement après une redirection pour éviter les erreurs.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 15h04   #8
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Bonjour,

je ne comprends l'utilité de l'exit()?
A quel endroit dois-je le mettre?
dans le if ou bien après?
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 17h05   #9
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
oui mais si on as des pages incluse une dans l'autre et qu'on ne sai plus vraiment ce qui est envoyé ou pas un meta apporte moins de problèmes.
Ce qui a aussi c'est que j'ai appris à utiliser le php sur free qui n'acceptait pas les headers donc... tare d'amateur
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 17h21   #10
Membre confirmé
 
Homme Emmanuel Thierry
Ingénieur systèmes et réseaux
Inscription : décembre 2003
Messages : 216
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Thierry
Âge : 24
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : décembre 2003
Messages : 216
Points : 219
Points : 219
Citation:
Envoyé par frol
oui mais si on as des pages incluse une dans l'autre et qu'on ne sai plus vraiment ce qui est envoyé ou pas un meta apporte moins de problèmes.
Ce qui a aussi c'est que j'ai appris à utiliser le php sur free qui n'acceptait pas les headers donc... tare d'amateur
Comme l'a si bien dit vg33, avec un exit() après le header, il n't a aucun problème.
@sam01 : le exit() arrête le traitement du script.

Sinon free accepte les header, j'utilise cette fonction depuis plusieures années pour mon avatar dynamique (d'ailleurs faudrait que je pense à le mettre ici )
Sékiltoyai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 17h27   #11
Membre confirmé
 
Avatar de frol
 
Inscription : mars 2005
Messages : 288
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : mars 2005
Messages : 288
Points : 268
Points : 268
Envoyer un message via AIM à frol Envoyer un message via MSN à frol Envoyer un message via Skype™ à frol
ah ben ou je me plantais ou j'étais autre part en fait j'étais sur un site ou il y avait un site publicitaire et ou mon site était dans une sorte de pseudo frame et comme il y avait quelque chose avant ma commande ça n'allait pas.
frol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 17h33   #12
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par sam01
je ne comprends l'utilité de l'exit()?
Si tu utilises header(), cela envoie un header au navigateur Mais tu peux en envoyer plusieurs. Donc le exit() termine le script => la redirection est immédiate. Si tu n'as pas d'exit(), le script continue et peut donc réaliser des opérations que tu ne souhaitais pas. De plus, si tu envoies d'autres headers, tu peux avoir une erreur ("headers already sent...") ou seule la dernière redirection sera effectuée.

Citation:
Envoyé par sam01
A quel endroit dois-je le mettre?
Code :
1
2
3
4
5
6
7
 
unset($_SESSION["commande"]);
 
if (!isset($_SESSION["commande"])) {
	header("Location: http://www.lldiffusion.com/index.php?commande=null");
	exit();
}
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h57   #13
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
c'est exactement ce qui s'est passé je pense,

mon script à continuer après ma redirection.
C'est dionc une règle générale en PHP, il faut toujours mettre un exit() derrieère un header.
Houllala, ça m'en fait des fichiers à modifier....

par contre je ne comprends pas pourquoi la redirection ne se fait àlors que condition est vérifiée...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 19h09   #14
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par sam01
par contre je ne comprends pas pourquoi la redirection ne se fait àlors que condition est vérifiée...
Tu peux envoyer plusieurs headers. Ils sont "exécutés" uniquement quand la connexion avec le navigateur est terminée = à la fin du script. Le exit() termine le script et donc force la redirection immédiatement.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 19h22   #15
Membre émérite
 
Avatar de viviboss
 
Inscription : août 2006
Messages : 943
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2006
Messages : 943
Points : 941
Points : 941
Je savais que le "exit()" était quasi-obligatoire après un header, mais pas que le script "stockait" les entête jusqu'à la fin de l'execution....

En effet, si en plein milieu d'un script on met un header() sans exit(), le header redirige quand même instantannément.... Mais je suppose que si on ne met pas d'exit(), le script doit être mal fermé, et aura peut être tendance à laisser des failles de sécurités, du moins peut-être des messages d'erreurs....
__________________
Veni Vidi Vici
-------------------------
Mes articles : developpez.com ou bien vbview.net
-------------------------
Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
Et aussi : --> pear_manual_fr.chm!!!

Ou encore : --> Les tutoriaux & cours PHP de Développez.com
-------------------------
viviboss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 20h30   #16
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Php ne stocke pas les en-tête (du moins sans utilisation du tampon de sortie), il les envoie immédiatement, comme le ferait un echo.
Mais, comme le dit le manuel :
Citation:
header

(PHP 3, PHP 4, PHP 5)
header -- Envoie un en-tête HTTP
Description
void header ( string string [, bool replace [, int http_response_code]] )

header() permet de spécifier l'en-tête HTTP string lors de l'envoi des fichiers HTML. Reportez-vous à HTTP/1.1 Specification pour plus d'informations sur les en-têtes HTTP.

Note : Depuis PHP 4.4.2 et PHP 5.1.2, cette fonction prévient l'envoi de plus d'un en-tête en même temps pour lutter contre les attaques par injection d'en-tête.

Le paramètre optionnel replace indique si la fonction header() doit remplacer un en-tête précédemment émis, ou bien ajouter un autre en-tête du même type. Par défaut, un nouvel en-tête va écraser le précédent, mais si vous passez FALSE dans cet argument, vous pouvez forcer les en-têtes multiples pour un même type d'en-tête.
plusieurs headers peuvent être envoyés à la suite, et parfois on peut envoyer plusieurs fois le même header. Seul le dernier dans ce cas sera exécuté. Pour forcer la redirection et éviter une continuation anarchique du script, il faut donc faire suivre le header par un exit().
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 10h25   #17
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
merci pour ces précieux conseils.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 19h53   #18
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Avec plaisir.
vg33 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 18h58.


 
 
 
 
Partenaires

Hébergement Web