2010-09-23 2 views
0

Dans mon fichier test.php, j'ai envoyé une demande à une application Flickr J'utiliseEnvoi d'une requête à un autre site qui a un rappel qui cible ma page originale

header("Location: " . $request); 

où la demande de $ est l'URL J'essaie d'atteindre sur Flickr.

Pour mon application Flickr, je dois définir une URL de rappel. Lorsque Flickr aura fini de traiter ma demande, il appellera l'URL de rappel.

Je voudrais que l'URL de rappel soit ma page d'origine, test.php. Quand j'essaye cela, je suis coincé dans une boucle infinie, parce que test.php renvoie la demande à Flickr, et Flickr appelle à nouveau mon test.php (répétez ad infinitum jusqu'à ce que le navigateur se ferme).

Existe-t-il un moyen de mettre un certain type de conditionnel dans test.php pour vérifier si la requête provient de Flickr, ou au moins de faire savoir au script que la requête a été envoyée, alors ne l'envoyez pas encore.

Je l'ai déjà essayé où j'ai changé l'URL de rappel à une autre de mes pages, et cela fonctionne très bien. Je vois juste si je peux réutiliser la même page.

+0

ne Flickr append une variable GET selon l'article 3 de cette page: http://www.flickr.com/services/api/auth.spec.html – Wrikken

+0

Il fait, mais quand j'essaie de pointer, dites à l'API d'authentification Flickr de rappeler mon test.php original , il continue à dire "n'a pas pu charger la source pour: [URL]" où [URL] est l'URL de rappel que je lui ai donnée, même si la page est là. Il continue juste à aller dans une boucle infinie jusqu'à ce que le navigateur le coupe. Si je définis l'URL de rappel sur une page séparée, je peux saisir la variable GET via $ _GET ['frob']. J'essayais de voir si je pouvais faire tout cela en un seul fichier. – Stephen

Répondre

1

Son laid.

Les deux solutions affichées ne fonctionneront pas parce que:

  • Le referer isnt changé sur redirect (bien qu'il soit effacé si son une redirection meta http, mais pas si son redirection d'en-tête, mais il ne marche pas. devenir quelque chose d'autre si facile).

  • Mettre une sortie après un en-tête envoyé est généralement une bonne idée si quelque chose d'autre est normalement exécuté par la suite, mais ce n'est pas lié au problème.

Plus simplement, si elle doit être la MÊME page, vous devez stocker dans un fichier ou base de données ou quelque chose les redirect comptes par adresse IP/utilisateur et casser ou quelque chose, mais AUCUN de cette est vraiment fiable. Vous pouvez le rendre plus sûr en ayant un jeton sécurisé qui ne peut pas être inversé etc, mais tout cela n'a pas de sens. Vous pouvez également utiliser des cookies. Ce qui est tout aussi peu fiable.

En ce qui concerne votre problème, flickr ne redirige pas vers le même âge. En ce qui concerne leurs spécifications, ils ajoutent? Frob = [frob]. http://www.flickr.com/services/api/auth.spec.html

Vérifier que:

<?php 
if(!isset($_GET["frob"])) { 
header("Location: " . $request); 
exit(); 
} 
?> 
+0

Ne devrait-il pas être si (! Isset ($ _ GET ["frob"]) que vous ne voulez pas re-diriger si vous venez de Flickr .... – eclipse31

+0

oui, bien sûr! Je voulais juste voir si quelqu'un avis :) –

1

vérifiez l'referer avec le $_server['HTTP_REFERER']

[Modifié]

Je voulais juste dire que, vous devriez essayer d'ajouter if condition

// just and example, use some regular expression to check the refere 
if($_SERVER['HTTP_REFERER'] != http://flicker.com){ 
header("Location: " . $request); 
}else{ 
// another code 
} 

Merci

+0

référent ne change pas avec la redirection. –

0

Comme alternative à la vérification de la (non) existence de $ _GET [ "frob"], ne pouvait pas vous définir l'URL de rappel dans Flickr pour www.mysite.com/test.php?from_flickr=1 puis faire

if (!$_GET['from_flickr']) { 
    header('Location: '.$request); 
    exit; 
} 
Questions connexes