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

感謝大家誰花時間來回應我很感激