在我的网站上,表单通过AJAX引入并针对sessionid进行检查。我知道这不是最佳的,但它对我们有用。如果引荐来源没有会话ID,则会将其重定向回“另一页”。我需要允许一些外部URL直接访问表单。 我们在页面上设置了带有表单链接的sessionid。
以下是我们现在在表单页面上的内容:
<?php
$code = $_GET['sessionid'];
if(strcmp( $code , 'XXXXX' ) != 0) {
header("Location: http://www.domain.com/anotherpage.php");
}
?>
我需要允许一些外部域直接访问表单页面,并且遇到问题: (我把它放在表格页面的头标上面)
<?php
$code = $_GET['sessionid'];
$referrer = $_SERVER['HTTP_REFERER'];
if(strcmp( $code , 'XXXXX' ) !=0) {
header("Location: http://www.domain.com/anotherpage.php");
} else {
if (preg_match("/site1.com/",$referrer)) {
header('Location: http://www.domain.com/desiredpage.php');
}
}
?>
这仍然会让我回到“anotherpage.php”的任何想法?
的 的 ** * ** * ** EDIT 的 * ** * ** * thx的帮助,它是我要求的广告。现在我看到我问的不完全正确。这会将URL附加到= sessionid?= XXXXX。这不是我网站上的问题,因为我正在使用.jquery .load加载内容,因此URL不会更改。我不希望sessionid可见,现在它是。我可以a)以某种方式“修剪”网址或者b)将这两个函数分开以使它们是独占的吗?
答案 0 :(得分:3)
if(strcmp( $code , 'XXXXX' ) !=0) {
if (preg_match("/site1.com/",$referrer)) {
header('Location: http://www.domain.com/desiredpage.php');
} else {
header("Location: http://www.domain.com/anotherpage.php");
}
}
答案 1 :(得分:1)
在我阅读您的帖子时,您希望preg_match
中的任何人都能获得所需的页面,无论sessionID
状态如何,因此您不想首先测试sessionID
使用if block
测试启动preg_match
。
答案 2 :(得分:1)
您的第一个if
正在检查他们是否没有$code
并重定向它们。情况总是如此。您应该首先检查$referrer
,然后执行$code
检查。
答案 3 :(得分:1)
如果使用else
,请尝试反向<?php
$code = $_GET['sessionid'];
$referrer = $_SERVER['HTTP_REFERER'];
if (preg_match("/site1.com/", $referrer)) {
header('Location: http://www.domain.com/desiredpage.php');
} else if (strcmp( $code , 'XXXXX' ) != 0) {
header("Location: http://www.domain.com/anotherpage.php");
}
?>
答案 4 :(得分:0)
如果我没有误解这个问题,问题就在于你检查事物的顺序。
如果您想允许部分引荐来访问网站即使他们没有会话ID ,您还必须检查之前 / strong>检查会话ID。否则,他们最终会像其他人一样得到对待。
您可以切换条件的顺序(首先检查引荐来源,然后检查会话ID)或检查您已经知道会话ID无效的分支内的引荐来源。
答案 5 :(得分:0)
问题可能出在你的正则表达式中,应该是:
if (preg_match("/site1\.com/",$referrer))
注意逃避点(。)