Помогите с PHP оператор if / else - PullRequest
0 голосов
/ 09 марта 2011

На моем сайте формы вводятся через AJAX и проверяются с помощью sessionid.Я знаю, что это не оптимально, но это работает для нас.Если у реферера нет идентификатора сеанса, он перенаправляется обратно на «другую страницу».Мне нужно разрешить некоторым внешним 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 был виден, и теперь это так.Могу ли я а) как-то «обрезать» URL-адрес или б) разделить две функции, чтобы они были исключительными?

Ответы [ 6 ]

3 голосов
/ 09 марта 2011
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 голос
/ 09 марта 2011

Попробуйте изменить, если с помощью

<?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");
    }
?>
1 голос
/ 09 марта 2011

Ваш первый if проверяет, есть ли у них $code, и перенаправляет их. Это всегда будет так. Вам, вероятно, следует сначала проверить $referrer, а затем выполнить проверку $code.

1 голос
/ 09 марта 2011

Когда я читаю ваше сообщение, вы хотите, чтобы кто-либо из preg_match получил нужную страницу независимо от статуса sessionID, поэтому вы не хотите сначала протестировать sessionID.

Запустите if block с тестом preg_match.

0 голосов
/ 09 марта 2011

Проблема может быть в вашем регулярном выражении, это должно быть:

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

уведомление о выходе из точки (.)

0 голосов
/ 09 марта 2011

Если я не неправильно понимаю, проблема в том, в каком порядке вы проверяете вещи.

Если вы хотите разрешить некоторым рефералам доступ к сайту даже если у них нет идентификатора сеанса , вы должны проверить это перед проверкой идентификатора сеанса.В противном случае они будут обрабатываться точно так же, как и все остальные.

Вы можете либо переключить порядок условий (сначала проверить источник ссылки, а затем проверить идентификатор сеанса), либо проверить источник ссылки внутри ветви.в котором вы уже знаете, идентификатор сессии недействителен.

...