帮助PHP if / else语句

时间:2011-03-09 18:26:43

标签: php logic referrer

在我的网站上,表单通过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)将这两个函数分开以使它们是独占的吗?

6 个答案:

答案 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))

注意逃避点(。)