在我的test.php文件中,我向我使用的Flickr应用程序发送了一个请求
header("Location: " . $request);
其中$ request是我尝试在Flickr上访问的网址。
对于我的Flickr应用,我必须设置一个回调网址。当Flickr完成处理我的请求后,它将调用回调URL。
我希望回调网址是我的原始网页test.php。当我尝试这个时,我陷入无限循环,因为test.php正在将请求重新发送回Flickr,而Flickr再次调用我的test.php(无限重复,直到浏览器退出)。
有没有办法在test.php中放置某种条件来检查请求是否来自Flickr,或者至少某种方式让脚本知道请求已经发送,所以不要再发送它
我已经尝试过,我将回调网址更改为我的另一个页面,并且工作正常。我只是看看我是否可以重复使用同一页面。
答案 0 :(得分:1)
尝试使用referer
$_server['HTTP_REFERER']
[被修改]
我只是想说,你应该尝试添加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
}
由于
答案 1 :(得分:1)
它的丑陋。
两个发布的解决方案无效,因为:
referer在重定向时未被更改(如果它是一个http元重定向,它会被清除,但如果它是一个标题重定向则不会被清除。但它不会变得如此简单)。
如果之后还有其他正常执行的内容,那么在发送标题后退出通常是一个好主意,但它与问题无关。
简单地说,如果它应该是 SAME 页面,您需要存储在文件或数据库中,或者每个ip地址/用户的重定向计数和中断或其他内容,但 NONE 这真的很可靠。您可以通过拥有一个无法反向生成的安全令牌来使其更安全,但所有这些都没有意义。你也可以使用cookies。这也是不可靠的。
关于您的问题,flickr不会重定向回到相同的年龄。 关于他们的规格,他们附加?frob = [frob]。 http://www.flickr.com/services/api/auth.spec.html
检查:
<?php
if(!isset($_GET["frob"])) {
header("Location: " . $request);
exit();
}
?>
答案 2 :(得分:0)
作为检查$ _GET [“frob”](非)存在的替代方法,您无法将Flickr中的回调网址设置为www.mysite.com/test.php?from_flickr=1
然后执行
if (!$_GET['from_flickr']) {
header('Location: '.$request);
exit;
}