2016-11-23 5 views
0

Я использую некоторый PHP для перенаправления посетителей сайта, если они не вошли в систему с использованием админов членов CMS. У меня есть этот код, который работает отлично:Комбинация логического оператора PHP

if (!perch_member_logged_in() && ($_SERVER["REQUEST_URI"] !== '/')){ 
    PerchSystem::redirect('/'); 
} 

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

if (!perch_member_logged_in() && (($_SERVER["REQUEST_URI"] !== '/') || ($_SERVER["REQUEST_URI"] !== '/?redirect=true'))){ 
    PerchSystem::redirect('/?redirect=true'); 
} 

Но я получаю слишком много перенаправлений. Может кто-нибудь помочь с этим?

+0

Что в _PerchSystem :: перенаправлять() _? –

+0

Он перенаправляет посетителя в указанный URI на сайте –

+0

Я имел в виду, что такое код? –

ответ

0

Я думаю, вам просто нужно это:

if (!perch_member_logged_in() && $_SERVER["REQUEST_URI"] !== '/?redirect=true') { 
    PerchSystem::redirect('/?redirect=true'); 
} 

Если пользователь не вошел в системе и приходит на вашу страницу, он может приземлиться на одной из трех страниц:

  • главной страницы - сделаю ничего
  • страница с redirect=true набор - тоже ничего не делают
  • любую другую страницу - перенаправление на главную страницу с redirect=true
0

Для начала я хотел бы указать вам на Operator Precedence page в руководстве по PHP. В нем объясняется, в каком порядке оцениваются операторы, что должно помочь вам избавиться от некоторых ненужных скобок в вашем коде.
Я подозреваю, что это также может решить вашу проблему, в зависимости от того, что вы имеете в виду «слишком много перенаправлений».

Хотя, я подозреваю, что вам также не нужно проверять перенаправление при доступе к корню. Трудно сказать наверняка, поскольку вы неправильно объяснили, что ваша проблема, и что вы ожидаете.
Другими словами, я (тоже) думаю, что ваш код должен выглядеть следующим образом:

if (!perch_member_logged_in() && $_SERVER["REQUEST_URI"] !== '/?redirect=true'){ 
    PerchSystem::redirect('/?redirect=true'); 
} 

Как этот бит кода говорит: Если пользователь не вошел в систему, а флаг переадресации установлен, перенаправлять пользователя ,

Еще одна вещь, которую вы должны сделать, это проверить код в методе PerchSystem::redirect() и убедиться, что он использует die() после отправки заголовка Location. В противном случае ваш код будет продолжать выполняться и вызывать нежелательное поведение и/или проблемы с безопасностью.

0

Оказывается, что мне нужно это:

if (!perch_member_logged_in() && ($_SERVER["REQUEST_URI"] !== '/') && ($_SERVER["REQUEST_URI"] !== '/?redirect=true')){ 
    PerchSystem::redirect('/?redirect=true'); 
} 

Спасибо всем, кто нашел время, чтобы ответить, я ценю это

Смежные вопросы