web-dev-qa-db-fra.com

window.location (JS) vs header () (PHP) pour la redirection

en utilisant JS: (dans <head> tag)

<script>window.location="https://stackoverflow.com";</script>

en utilisant PHP: (en <head> tag)

header('Location: https://stackoverflow.com');
end();

Laquelle devrais-je utiliser? ou un autre ?

et qu'en est-il de l'utilisation<meta>?

<meta http-equiv="refresh" content="0;url=https://stackoverflow.com"/> 

Beaucoup de bonnes réponses, je ne sais pas quelle réponse j'accepterai, merci beaucoup

14
l2aelba

Le résultat est le même pour toutes les options. Réorienter.

<meta> En HTML:

  • Afficher le contenu de votre site et rediriger l'utilisateur suivant après quelques (ou 0) secondes.
  • Pas besoin d'activer JavaScript.
  • Pas besoin de PHP.

window.location Dans JS:

  • Javascript activé nécessaire.
  • Pas besoin de PHP.
  • Afficher le contenu de votre site et rediriger l'utilisateur suivant après quelques (ou 0) secondes.
  • La redirection peut dépendre de toutes les conditions if (1 === 1) { window.location.href = 'http://example.com'; }.

header('Location:') en PHP:

  • Pas besoin d'activer JavaScript.
  • PHP nécessaire.
  • La redirection sera exécutée en premier, l'utilisateur ne verra jamais ce qui est après. header() doit être la première commande du script php, avant de sortir une autre. Si vous essayez d'en sortir avant l'en-tête, vous recevrez un Warning: Cannot modify header information - headers already sent
21
Damonsson

Une meilleure façon de définir l'emplacement dans JS est via:

window.location.href = 'https://stackoverflow.com';

L'utilisation de PHP ou JS pour gérer la redirection dépend de ce que fait votre code et comment. Mais si vous êtes en mesure d'utiliser PHP; c'est-à-dire, si vous allez utilisez PHP pour renvoyer du code JS au navigateur qui indique simplement au navigateur d'aller ailleurs, alors la logique suggère que vous devez supprimer l'homme du milieu et le dire directement au navigateur via PHP.

11
Wintermute

Cela dépend de la manière et du moment où vous souhaitez rediriger l'utilisateur vers une autre page.

Si vous voulez rediriger instantanément un utilisateur vers une autre page sans qu'il ne voit quoi que ce soit d'un site entre les deux, vous devez utiliser la méthode de redirection PHP header .

Si vous avez un Javascript et ne action de l'utilisateur doit le faire entrer dans une autre page, c'est alors que vous devez utiliser window.location.

L'actualisation de la balise meta est souvent utilisée sur les sites de téléchargement chaque fois que vous voyez ces messages "Votre téléchargement doit démarrer automatiquement". Vous pouvez laisser l'utilisateur charger une page, attendre un certain temps, puis rediriger lui (par exemple vers un fichier à télécharger) sans Javascript.

8
Butt4cak3

Les redirections PHP sont meilleures si vous le pouvez, comme avec JavaScript, vous amenez le client à charger la page avant la redirection, tandis qu'avec le PHP celui-ci, il envoie l'en-tête approprié.

Cependant, le PHP ne doit pas aller dans le <head>, il doit aller avant que toute sortie ne soit envoyée au client, car sinon, cela entraînera des erreurs.

L'utilisation des balises <meta> a le même problème que Javascript en provoquant le chargement de la page initiale avant de faire la redirection. Les redirections côté serveur sont presque toujours meilleures, si vous pouvez les utiliser.

3
krisnoble

Le premier cas échouera lorsque JS est désactivé. C'est aussi un peu plus lent car JS doit être analysé en premier (DOM doit être chargé). Cependant, JS est plus sûr car la destination ne connaît pas le référent et votre redirection peut être suivie (les référents ne sont pas fiables en général mais c'est quelque chose) .

Vous pouvez également utiliser la balise meta refresh . Il nécessite également que DOM soit chargé.

2
oleq