2016-11-23 67 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'); 
} 

如果用户没有登录,并涉及到您的网页,他可以在三个页面一个登陆:

  • 首页 - DO什么
  • redirect=true设为首页 - 也无可奈何
  • 任何其他网页 - 重定向与redirect=true
  • 主页
0

首先我想指出你在PHP手册中的Operator Precedence page。它解释了操作符被评估的顺序,这可以帮助您摆脱代码中不必要的括号。
我怀疑这也可以解决你的问题,这取决于你的意思是“太多的重定向”。

虽然,我怀疑你也不需要检查根访问时的重定向。很难说,因为你没有正确地解释你的问题是什么,以及你期望发生什么。
换句话说,我(也)想你的代码应该是这样的:

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

由于代码位说:如果用户没有登录,并重定向标志设置,将用户重定向。

您应该做的另一件事是检查PerchSystem::redirect()方法中的代码,并确保它在发送Location标头后使用die()。否则,您的代码将继续执行,并导致不需要的行为和/或安全问题。

0

原来我需要这样的:

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

感谢大家谁花时间来回应我很感激