0

在我的网站上,表单是通过 AJAX 引入的,并根据 sessionid 进行检查。我知道这不是最优的,但它对我们有用。如果引用者没有会话 ID,他们将被重定向回“另一个页面”。我需要允许一些外部 URL 直接访问表单。我们在带有表单链接的页面上设置 sessionid。

这是我们现在在表单页面上的内容:

<?php
$code = $_GET['sessionid'];
if(strcmp( $code , 'XXXXX'  ) != 0) {
    header("Location: http://www.domain.com/anotherpage.php");
} 
?>

我需要允许一些外部域直接访问表单页面并且对此有问题:(我将它放在表单页面的 head 标签上方)

<?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”有什么想法吗?

** * ** * **编辑* ** * ** * 感谢您的帮助,我要求的广告有效。现在我发现我问的并不完全正确。这会在 URL 后面附加 =sessionid?=XXXXX。这在我的网站上不是问题,因为我正在使用 .jquery .load 加载内容,因此 URL 不会更改。我不希望 sessionid 可见,现在它是可见的。我可以a)以某种方式“修剪”网址还是b)将这两个功能分开,以便它们是独占的?

4

6 回答 6

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");
    }
} 
于 2011-03-09T18:29:35.253 回答
1

当我阅读您的帖子时,您希望任何人都能preg_match获得所需的页面,而不管sessionID状态如何,因此您不想先测试 sessionID。

if block从测试开始preg_match

于 2011-03-09T18:29:56.203 回答
1

你的第一个if是检查他们是否没有$code并重定向它们。情况将永远如此。您可能应该先检查一下$referrer,然后再进行$code检查。

于 2011-03-09T18:31:01.257 回答
1

Try reverse if with 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");
    }
?>
于 2011-03-09T18:31:57.993 回答
0

如果我没有误解这一点,那么问题出在您检查事物的顺序上。

如果您想允许某些推荐人访问该站点,即使他们没有会话 id,您必须在检查会话 id之前进行检查。否则,他们最终会像其他人一样受到对待。

您可以切换条件的顺序(首先检查引荐来源网址,然后检查会话 ID)或在您已经知道会话 ID 无效的分支内检查引荐来源网址。

于 2011-03-09T18:31:57.830 回答
0

The issue could be in your regex, it should be:

if (preg_match("/site1\.com/",$referrer))

notice escaping the dot (.)

于 2011-03-09T18:33:16.183 回答