2009-12-18 6 views
2

D'accord, voici ma situation.PHP, HTTP_REFERER ne fonctionne pas sur iframe?

J'ai une page, index.php, qui est le mainsite (site flash)

J'ai une autre page appelée iframe.php qui contiennent iframe de index.php

Une autre page test.php . ont à l'intérieur 2 liens, 1er lien est directement index.php, un autre lien est iframe.php

Je l'ai testé:

  • je clique sur le 1er lien, quand je trace/écho le HTTP_REFERER, il affiche "test.php", mais

  • Je clique sur le 2ème lien, quand je trace/renvoie le HTTP_REFERER, il affiche "iframe.php".

Pourquoi afficher "iframe.php"? HTTP_REFERER ne fonctionne pas sur iframe ??

Est-il possible d'obtenir le "test.php" quand je clique sur le second lien?

code source pour: index.php

<html> 
<head> // Some headers information 
<script type="text/javascript" src="js/swfobject.js"></script> 
<script type="text/javascript"> 
var flashvars = {}; 
    <?php 
if(!empty($_SERVER['HTTP_REFERER'])){ 
?> 
    flashvars.link  = '<?php echo $_SERVER['HTTP_REFERER']; ?>'; 
<?php 
} 
?> 
var params = {}; 
var attributes = {}; 
swfobject.embedSWF("main.swf, "content", "100%", "100%", "9", "expressInstall.swf", flashvars, params, attributes); 
</script> 
</head> 
<body> 
    <div id="content"> 
    <a href="http://www.adobe.com/go/getflashplayer"> 
      <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /> 
     </a> 
    </div> 
</body> 
</html> 

code source pour iframe.php

<html> headers tag 
... 
<body> 
<center><iframe src="index.php" mce_src="index.php" frameborder="0" height="500" scrolling="no" width="500"></iframe></center> 
</body> 
</html> 

code source pour test.php:

.... 
<a href="iframe.php" target="_blank">This is Iframe</a> <br><br> 
.... 
<a href="index.php" target="_blank">This is normal link</a> <br><br> 
+0

Veuillez poster le code source pour 'index.php',' test.php' et 'iframe.php' afin que nous puissions essayer de reproduire votre problème. – Asaph

+0

roger cela. Donnez-moi 5 minutes – mysqllearner

Répondre

1

Dans les deux cas, vous » voir la sortie de index.php. Voici pourquoi:

Scénario 1)

Lorsque vous cliquez sur index.php à partir du lien dans test.php, il charge index.php (avec test.php comme HTTP_REFERER).

Scénario 2)

Lorsque vous cliquez sur iframe.php à partir du lien dans test.php, il charge iframe.php qui charge en interne index.php dans la balise (avec iframe.php comme HTTP_REFERER).

+0

Mis à jour ma question avec le code source. S'il vous plaît jeter un oeil, voir s'il y a quelque chose de mal? – mysqllearner

+0

Mis à jour ma réponse – Asaph

+0

Non, le résultat est différent. Quand je clique sur le lien normal, il affiche test.php (ce qui est correct), mais quand je clique sur le lien iframe, il affiche iframe.php. C'est pourquoi je pose cette question ici. Vous avez un résultat différent de moi? Puis-je savoir quel système d'exploitation et quel navigateur utilisez-vous? – mysqllearner

0

Malheureusement, non. La valeur HTTP_REFERER pour une page affichée à l'intérieur d'un iframe sera toujours la page parente qui contient l'iframe.

HTTP_REFERER a tendance à être un peu difficile à compter de toute façon. Si vous pouvez éviter de construire une logique importante, c'est une bonne idée de le faire.

Je suppose que vous utilisez php - peut-être que vous pourriez utiliser la session pour stocker la dernière page visitée lors du chargement de test.php? Sur test.php, vous définissez $_SESSION['referringPage'] = 'test.php';. Puis, sur index.php, vous lisez la valeur $_SESSION['referringPage'] et vous obtenez la même information, que la page ait été chargée dans l'iframe ou non.

+0

Normalement, j'utilise la session. Mais cette fois, je ne peux pas le faire. Je donnerai à mon client seulement le lien, exemple: This is Iframe, je ne peux pas faire beaucoup ici. Ou vous avez une meilleure solution? Ma condition: donne 1 lien au client pour détecter l'URL précédente. – mysqllearner

+0

@Paul: L'approche '$ _SESSION' que vous recommandez est à risque si vous avez plusieurs fenêtres/onglets de navigateur ouverts. Différentes demandes peuvent remplacer les valeurs de session de l'autre. – Asaph

+0

Ah .. Je n'ai pas remarqué cela. Mais jusqu'à présent, je n'ai encore reçu aucune plainte. Je dois changer la méthode dès que possible. Alors, Asaph, quelle est la bonne façon de faire cela? Je veux dire obtenir l'URL précédente ?? – mysqllearner