redirection temporisée avec header

redirection temporisée avec header - PHP - Programmation

Marsh Posté le 24-01-2006 à 21:20:47    

Bien le bonjour !
 
J'aurai voulu savoir comment faire avec header une redirection temporisée (comme par exemple sur ce site la page intermédiaire quand on rentre son login et mdp  pour se connecter, la page te dit "ok t'es connecté" et te renvoit sur ta page précédente).
 
En effet, pas de problème pour rediriger avec

Code :
  1. header ('Location : trucmuche.php') ;

mais dans ce cas la redirection est immédiate et pas moyen de voir ce que la page doit afficher.
Je n'ai rien vu dans cette fonction qui permettait de temporiser : http://www.php.net/header
 
J'ai bien pensé à une temporisation en php, mais comme on doit envoyer le header avant quoique soit d'autre, je ne peux pas afficher quelque chose, puis balancer le header pour rediriger.
 
Donc, comment faites-vous ? :)

Reply

Marsh Posté le 24-01-2006 à 21:20:47   

Reply

Marsh Posté le 24-01-2006 à 21:38:58    

Salut,
 
tu peux essayer ca : header('Refresh: 2; URL=trucmuche.php') ;
dans ce cas ta page change au bout de 2s.
 
sinon ca aussi: <meta http-equiv="refresh" content="2; url=''trucmuche.php">
 
 :)

Reply

Marsh Posté le 24-01-2006 à 21:39:10    

Je vais te répondre franchement, et j'espère que tu ne le prendras pas mal, mais comment donc espères tu que l'utilisateur ait le temps de lire quelque chose sur son navigateur alors que le header est destiné au serveur qui envoit la page ?
 
Bref, les redirections temporisées comme tu dis, ce sont des <meta refresh> html, pas un header php.
 
(et je n'insiste même pas sur l'aspect idiot de vouloir passer un message sur une page intermédiaire, obligeant ainsi le client à recontacter le serveur pour obtenir la page suivant plutôt que de mettre directement le message sur la page finale, c'est un des trucs que j'ai jamais compris en ASP...)

Reply

Marsh Posté le 24-01-2006 à 22:19:33    

naceroth a écrit :

Je vais te répondre franchement, et j'espère que tu ne le prendras pas mal, mais comment donc espères tu que l'utilisateur ait le temps de lire quelque chose sur son navigateur alors que le header est destiné au serveur qui envoit la page ?
 
Bref, les redirections temporisées comme tu dis, ce sont des <meta refresh> html, pas un header php.
 
(et je n'insiste même pas sur l'aspect idiot de vouloir passer un message sur une page intermédiaire, obligeant ainsi le client à recontacter le serveur pour obtenir la page suivant plutôt que de mettre directement le message sur la page finale, c'est un des trucs que j'ai jamais compris en ASP...)


 
C'est ce que fait HFR :whistle:
 
P.S. : Méthode que je n'utilise pas en ce qui me concerne, je préfère, comme tu dis, afficher un message sur la page de destination.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:20:43    

naceroth a écrit :

Je vais te répondre franchement, et j'espère que tu ne le prendras pas mal


non non, jsuis là pour apprendre
 

naceroth a écrit :

Bref, les redirections temporisées comme tu dis, ce sont des <meta refresh> html, pas un header php.

oki en fait j'avais tellement entendu dire que les redirection avec des <meta refresh> c'était le mal, que je croyais que vous passiez par header
 

naceroth a écrit :

(et je n'insiste même pas sur l'aspect idiot de vouloir passer un message sur une page intermédiaire, obligeant ainsi le client à recontacter le serveur pour obtenir la page suivant plutôt que de mettre directement le message sur la page finale, c'est un des trucs que j'ai jamais compris en ASP...)


bah je voulais dire, tu sais comme quand tu te connectes sur ce site : tu entres tes logins, mot de passe, une page apparait pour te dire que ta connection a réussi, et te renvoie sur la page précédente.
 
 
Bon donc, <meta refresh> n'es pas le mal absolu pour une redir temporisée, c'est bon ?

Reply

Marsh Posté le 24-01-2006 à 22:22:04    

Dj YeLL a écrit :


P.S. : Méthode que je n'utilise pas en ce qui me concerne, je préfère, comme tu dis, afficher un message sur la page de destination.


le problème avec ça, c'est que si tu fais retour, tu as ton navigateur qui te dit 'attention la page contient des post datas, voulez vous les renvoyer' et c'est ça que je veux éviter

Reply

Marsh Posté le 24-01-2006 à 22:25:55    

Djebel1 a écrit :

le problème avec ça, c'est que si tu fais retour, tu as ton navigateur qui te dit 'attention la page contient des post datas, voulez vous les renvoyer' et c'est ça que je veux éviter


 
Non ;)
 
Tu as ta pages 'mapage.php' par exemple, avec un formulaire.
Tu valides -> Page de traitement avec un header('Location: mapage.php?ok=1');
Tu es directement redirigé vers ta page 'mapage.php' sur laquelle tu mets :
 

Code :
  1. if(isset($_GET['ok']) && $_GET['ok']) {
  2.    echo 'Message validé';
  3. }


 
Si tu cliques su précédent tu retombes donc sur ta page 'mapage.php'


Message édité par Dj YeLL le 24-01-2006 à 22:26:23

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:29:02    

Vi c'est ça que je veux faire. Mais quel est le problème à afficher un message sur la page de traitement ?
 
Et pour faire ça, le mieux c'est header ou <meta refresh> ?


Message édité par Djebel1 le 24-01-2006 à 22:29:17
Reply

Marsh Posté le 24-01-2006 à 22:30:57    

Si tu affiches un message sur la page de traitement, déjà tu obliges le navigateur à changer de pages 2 fois, avec un header, tu ne changes pas de page.
 
Si tu utilise une balise META ça ne changera rien à ton problème de bouton "précédent".


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:33:31    

oki merci pour tes réponses.
 
Le problème, c'est que si tu fais un formulaire de login, tu veux renvoyer l'utilisateur sur la page d'où il s'est connecté. Et entre temps tu veux lui dire 'ok t'es bien connecté'.
 
C'est pour ça, je voulais afficher que la connection au site était réussie sur la page de traitement, et ensuite renvoyer sur la page d'ou venait l'utilisateur

Message cité 1 fois
Message édité par Djebel1 le 24-01-2006 à 22:33:47
Reply

Marsh Posté le 24-01-2006 à 22:33:31   

Reply

Marsh Posté le 24-01-2006 à 22:41:20    

Dj YeLL a écrit :

C'est ce que fait HFR :whistle:


 
Personne n'est parfait :D
 
Non, mais si HFR (ou la presque totalité des sites qui hébergent un forum, puisque c'est généralisé) ont une volume de transfert illimité, grand bien leurs fassent hein. Ca n'en reste pas moins idiot de faire attendre un gars x secondes + chargement. (sans compter que celle d'HFR a la mauvaise habitude de ne pas aller plus loin que le message à la con chez moi  :ange: )

Reply

Marsh Posté le 24-01-2006 à 22:42:07    

En principe il y a toujours moyen de caser ça quelque part.
 
De plus, une fois connecté je suppose qu'il y a quelque chose qui l'indique sur la page, un menu par exemple.
 
Sur le site que je suis en train de coder, j'ai un menu "Se connecter - S'enregistrer" ... si on se connecte, il devient "Mon Compte - Se déconnecter"
 
L'utilisateur voit ainsi s'il est connecté ou non.
 
Sinon, si tu codes correctement, je suppose que tu as un fichier à inclure dans lequel tu as l'header de ton site (<html><head><body>...) Rien ne t'empêche dans cette page d'ajouter ton if(...){ echo 'Vous êtes connecté'; } après BODY... comme ça quelle que soit la page d'où il vient, le message sera affiché.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:42:19    

edit : oui oki
c'est vrai que c'est pas tres gênant de pas afficher de message comme quoi c'est bon.
 
bon bah merci pour tout :)


Message édité par Djebel1 le 24-01-2006 à 22:43:43
Reply

Marsh Posté le 24-01-2006 à 22:43:25    

naceroth a écrit :

Personne n'est parfait :D
 
Non, mais si HFR (ou la presque totalité des sites qui hébergent un forum, puisque c'est généralisé) ont une volume de transfert illimité, grand bien leurs fassent hein. Ca n'en reste pas moins idiot de faire attendre un gars x secondes + chargement. (sans compter que celle d'HFR a la mauvaise habitude de ne pas aller plus loin que le message à la con chez moi  :ange: )


 
Ca m'arrive aussi parfois, et ce message m'enerve de toute façon !
 
Je m'en fout de savoir que "Votre message à été posté avec succès" ... puisque de toute façon le forum nous renvoi à ce dernier, donc on voit bien qu'il a été posté.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:43:39    

Djebel1 a écrit :

oki merci pour tes réponses.
 
Le problème, c'est que si tu fais un formulaire de login, tu veux renvoyer l'utilisateur sur la page d'où il s'est connecté. Et entre temps tu veux lui dire 'ok t'es bien connecté'.
 
C'est pour ça, je voulais afficher que la connection au site était réussie sur la page de traitement, et ensuite renvoyer sur la page d'ou venait l'utilisateur


 
Pas un gros soucis ça, un champ hidden avec l'adresse courante de la page où se situe le formulaire et hop, problème résolu, tu connais l'adresse où renvoyer ton utilisateur.

Reply

Marsh Posté le 24-01-2006 à 22:44:45    

vivi, ça c'est pas le problème, j'utilise une variable de session pour stocker quelle est la dernière page vue :)

Reply

Marsh Posté le 24-01-2006 à 22:45:05    

naceroth a écrit :

Pas un gros soucis ça, un champ hidden avec l'adresse courante de la page où se situe le formulaire et hop, problème résolu, tu connais l'adresse où renvoyer ton utilisateur.


 
Même pas, encore mieux, sur la page de validation tu récupère l'info avec $_SERVER['HTTP_REFERER'].
 
Mais de toute façon ce n'était pas sa question ;)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:45:31    

Djebel1 a écrit :

vivi, ça c'est pas le problème, j'utilise une variable de session pour stocker quelle est la dernière page vue :)


 
Pas la peine. (voir mon précédent message)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:47:24    

non, le $_SERVER['HTTP_REFERER'] est pas fiable à 100 %

Reply

Marsh Posté le 24-01-2006 à 22:48:03    

Dj YeLL a écrit :

Même pas, encore mieux, sur la page de validation tu récupère l'info avec $_SERVER['HTTP_REFERER'].
 
Mais de toute façon ce n'était pas sa question ;)


 
Tu m'excuseras si je préfère une méthode non bidouillable par le navigateur :)

Reply

Marsh Posté le 24-01-2006 à 22:48:47    

naceroth a écrit :

Tu m'excuseras si je préfère une méthode non bidouillable par le navigateur :)


 
:??: .. euh même si l'utilise bidouille cette info je ne vois pas le problème ... ce n'est qu'une redirection ...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 22:51:29    

vi y a pas de probleme, mais c'est vite fait de rajouter une ligne de code pour la stocker dans une variable de session je trouve ^^
 
d'ailleurs un champ caché c'est aussi bidouillable par l'utilisateur je pense. Suffit de regarder les variables envoyées en post, et d'en changer la valeur (avec wget par exemple t'envoie les valeurs que tu veux en post data)

Message cité 1 fois
Message édité par Djebel1 le 24-01-2006 à 22:52:47
Reply

Marsh Posté le 24-01-2006 à 22:59:44    

Oui, j'avoue que l'idée de stocker la dernière page vue dans $_SESSION est une bonne idée :)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 23:06:26    

Dj YeLL a écrit :

Si tu affiches un message sur la page de traitement, déjà tu obliges le navigateur à changer de pages 2 fois, avec un header, tu ne changes pas de page.

Je vais peuit être dire une bétise, mais même s'il n'y a qu'une seule page de visible avec le bouton précédant du navigateur ou simplement de visible à l'écran, pour le serveur, ca va quand même faire deux demandes distinctes il me semble.

Message cité 1 fois
Message édité par omega2 le 24-01-2006 à 23:06:40
Reply

Marsh Posté le 24-01-2006 à 23:20:51    

omega2 a écrit :

Je vais peuit être dire une bétise, mais même s'il n'y a qu'une seule page de visible avec le bouton précédant du navigateur ou simplement de visible à l'écran, pour le serveur, ca va quand même faire deux demandes distinctes il me semble.


 
Il ne me semble pas que ça génère un changement de page, mais je peux me tromper


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 23:28:46    

Je viens de tester voilà ce que ca donne au niveau du log d'apache :

Citation :

127.0.0.1 - - [24/Jan/2006:23:46:42 +0100] "GET /php4/page1.php HTTP/1.1" 302 -
127.0.0.1 - - [24/Jan/2006:23:46:42 +0100] "GET /php4/page2.php HTTP/1.1" 200 4


On a donc bien deux demandes d'envoyé au serveur.

Reply

Marsh Posté le 24-01-2006 à 23:32:05    

Djebel1 a écrit :

vi y a pas de probleme, mais c'est vite fait de rajouter une ligne de code pour la stocker dans une variable de session je trouve ^^
 
d'ailleurs un champ caché c'est aussi bidouillable par l'utilisateur je pense. Suffit de regarder les variables envoyées en post, et d'en changer la valeur (avec wget par exemple t'envoie les valeurs que tu veux en post data)


 
Oui mais bon, là, c'est aller chercher un enculeur de mouche sur tous les visiteurs, je veux bien si c'est l'ordinateur du patron de la CIA, mais faut pas forcer non plus. Un referer bidon/absent est quand même nettement plus commun, entre les paranos et les autres devs qui oublient de désactiver la fonction qui masque le referer ( <- style moi :ange: )

Reply

Marsh Posté le 24-01-2006 à 23:42:24    

donc d'après ce que tu dis omega2, finalement ça change rien de faire afficher quelque chose sur la page de traitement ?

Reply

Marsh Posté le 25-01-2006 à 00:16:19    

Pour le serveur, ca doit pas changer grand chôse à par qu'il renvoie un signal de redirection 302 (redirection temporaire : ca signifie généralement que la page existe mais est temporairement indisponible) quand on utilise le "header(Location:mapage.php" );" tandis que dans l'autre cas, ca renvoie un signal 200. (ok tout c'est bien passé)
Pour le navigateur, une redirection de type 302 fera qu'il ne notera pas la page d'origine dans l'historique de navigation (la page n'apparaitra pas dans la liste des pages précédantes/suivantes) vu que le navigateur considérera la page d'arrivé comme étant la même page mais à une autre adresse. Une redirection à coup de balise refresh ou de header "refresh" provoquera le changement de page aprés x secondes mais en même temps la page intermédiaire sera accéssible dans la liste des pages précédantes. Un internaute qui reviendrait sur cette page et qui voudrait la rafraichir renverais à nouveau toutes les données déjà envoyé une fois ce qui provoquerait l'insertion en double si insertion il y avait eu la premiére fois.

Reply

Marsh Posté le 25-01-2006 à 00:29:59    

t'es sur que la page est accessible avec header "refresh" ? j'ai testé et elle n'apparaissait pas dans l'historique, ou alors j'ai trop fumé
 
edit : j'ai retesté, et sous firefox en tout cas il ne garde pas la page dans l'historique avec le header refresh


Message édité par Djebel1 le 25-01-2006 à 00:43:32
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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