2016-07-18 37 views
0

嗨,我在Safari瀏覽器遇到這個奇怪的錯誤,我有一個網站年齡檢查器,每當訪問者年齡大於18我創建一個cookie與JavaScript和使用window.location.href轉發他到主頁。在Safari中的PHP cookie識別

在主頁,我有以下腳本:

if(!$_COOKIE['legal'] && icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE) != $post->ID) { 
    header('Location: '. get_permalink(icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE))); 
} 

這使得用戶重定向如果「法律」沒有設置cookie的,他是不是已經年齡檢查頁面上。

現在在Chrome和Firefox上一切正常(還沒有檢查IE),但在Safari瀏覽器中,每當我通過年齡檢查器並在主頁上登陸時,它表示「調優」cookie尚未定義,但是我確實在控制檯的存儲區域中看到它。在我重新加載頁面後,它確實識別cookie。

任何人有任何想法如何解決這個問題?

編輯:

JavaScript並認識到在第一次請求中的Cookie,PHP不會。

+0

可能是客戶端在首次請求時未將cookie發送到服務器? –

+0

那麼你會建議什麼是一個好的解決方案?有2個重定向或什麼的不太好。 – LVDM

+0

是的,客戶應該只在第一次請求時向服務器發送cookie。檢查爲什麼沒有發送第一次請求。 –

回答

0

這不是最好的解決方案,但這個工作對我來說:

更換這個小腳本:

if(!$_COOKIE['legal'] && icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE) != $post->ID) { 
    header('Location: '. get_permalink(icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE))); 
} 

通過:

if(!$_COOKIE['legal'] && icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE) != $post->ID) { 
    header('Location: '. get_permalink(icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE))); 
} else if($_COOKIE['legal'] && icl_object_id(get_page_by_path('age-checker')->ID, 'page', false, ICL_LANGUAGE_CODE) == $post->ID) { 
    header('Location: '. get_home_url()); 
} 

而在JavaScript中,其中i設置Cookie: 我只需重新加載頁面

window.location.reload();