2011-09-13 46 views
5

我目前在嘗試使用PHP或Javascript讀取cookie時遇到了一些問題。我已經嘗試使用:在iPad上時無法通過PHP或Javascript讀取cookie

if(!$_COOKIE['popup_closed'] 
&& !isset($_COOKIE['username']) 
&& !isset($_COOKIE['password']) 
) 

我曾嘗試:

if(
$.cookie('popup_closed') == null 
&& $.cookie('username') == null 
&& $.cookie('password') == null) { 
doStuff(); 
} 

(使用jquery.cookie插件)

而且他們都沒有在iPad上運行。它適用於所有瀏覽器,我嘗試過使用谷歌搜索這個問題,但似乎沒有太多關於在iPad上閱讀cookie的信息。

感謝您的幫助!

+0

你的代碼在Safary(在Mac或PC上)工作正常嗎?它應該在iPad上以相同的方式工作。 – haynar

+0

確實如此。 Cookies也在iPad上打開。 –

+0

不幸的是我不知道爲什麼它不起作用,但前段時間我在所有Safari版本(Mac,PC,iPad等)上都遇到了與cookies有關的問題。這是Safari的內置限制(Safari不接受來自第三方網站的Cookie,除非用戶明確與網頁交互)。也許你正試圖從iframe使用cookie? – haynar

回答

7

這實際上是一種解決方法,但如果可用,您可以使用本地存儲 - 至少我已成功在iPad/iPhone中使用它。

例如使用這種解決方案。

function saveData(name, value) { 
    if (typeof(localStorage) != 'undefined') { 
     localStorage.setItem(name, value); 
    } else { 
     createCookie(name, value, 7); 
    } 
} 

function loadData(name) { 
    var temp_value = ''; 

    if (typeof(localStorage) != 'undefined') { 
     temp_value = localStorage.getItem(name); 
    } else { 
     temp_value = readCookie(name); 
    } 

    return temp_value; 
} 

function eraseData(name) { 
    if (typeof(localStorage) != 'undefined') { 
     localStorage.removeItem(name); 
    } else { 
     eraseCookie(name); 
    } 

} 

function createCookie(name,value,days) { 
    var expires = ""; 

    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     expires = "; expires=" + date.toGMTString(); 
    } 
    else { 
     expires = ""; 
    } 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(name) { 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') { 
      c = c.substring(1,c.length); 
     } 
     if (c.indexOf(nameEQ) === 0) { 
      return c.substring(nameEQ.length, c.length); 
     } 
    } 
    return null; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 
+1

其實這是一個非常漂亮的解決方法,+1 – Aidiakapi

+0

嗨馬庫斯,謝謝你!我會在下週二看它是否有效,因爲那是我在該網站上工作的那一天。我會在週二接受你的答案,如果它工作:)再次感謝。 –

+0

嗨,沒問題,很高興聽到解決方案對你有用! – Marcus

0

你看看關於setcookie的manual嗎?你應該使用所有的變量,也許這解決了你不能使用JS訪問你的cookies的事實?此外,使用本機JS訪問cookie(而不是jQuery),這不工作?