2010-05-31 12 views
3

Lorsque afficher des données de DB habituellement je suis dans cette situationredirection d'en-tête de PHP ne se recharge pas <iframe> dans IE

  1. Je suis la page A.php qui affiche les données de DB,
  2. utilisateur exécute une action (comme modifier/supprimer, etc.) et la page B.php est chargé d'exécuter l'action,
  3. une fois la page B a effectué l'action, redirige le navigateur à la page A,
  4. page A est auto rechargées lors de l'étape (3) à cet effet, il montre une situation mise à jour des données

Afin de rendre la page B pour rediriger vers la page A i utiliser un simple PHP

header("Location: " . "A.php", TRUE, 302);

Cela fonctionne bien dans toutes les situations, excepté lorsque les pages A.php sont déplacées dans un : dans ce cas, il ne recharge pas (l'étape 4 ne se fait pas). Cela semble se produire uniquement dans IE7 (ne sais pas à propos de IE8), il fonctionne parfaitement sur FF/Safari. Et seulement si vous utilisez un , si la page A.php n'est pas dans , il se rafraîchira également dans IE7.

Pour résoudre cela, je simplement ajouté quelques têtes dans la page A.php pour le mettre à ne pas être mis en mémoire cache:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

Mais j'étais curieux de savoir si vous pourriez avoir éprouvé le même problème aussi dans le passé, et si vous pouviez me donner quelques conseils à ce sujet?

Répondre

0

Utilisez-vous des sessions? Si oui, pouvez-vous tester à nouveau votre scénario sans session et sans votre correctif?

Le correctif que vous avez apporté concerne le contrôle et l'expiration du cache, qui est modifié par session_start() et/ou session_cache_limiter(). Pourtant, ce comportement est étrange, cela pourrait être un bug spécifique à IE-7. Le contenu se trouve-t-il dans le même domaine que le cadre «extérieur»?

+0

Non, n'utilisant pas de sessions. –

0

Sinon, vous devrez peut-être fournir le chemin complet "http://...etc". dans l'en-tête() appel.

+0

Oui, le même domaine! –

+0

Je fournis toujours des urls complètes dans l'en-tête, c'est obligatoire. –

0

J'ai vu cela se produire jusqu'à IE11. Tout d'abord, dans certains cas, IE sera plus agréable lorsque votre URL de redirection a le même protocole que l'URL iframe d'origine.

De nombreuses personnes ont également réussi à résoudre des problèmes similaires en ajoutant un en-tête P3P. Essayez d'ajouter ceci: header('P3P: CP="CAO PSA OUR"') avant d'envoyer l'en-tête de redirection.