2010-02-18 185 views
9

我如果使用下面的JavaScript代碼疑惑是可靠的:Is!document.cookie可靠嗎?

if (!document.cookie) { 
    alert('Cookies are disabled.'); 
} 

我在IE,Firefox和Chrome測試這一點,看來,當你禁用cookie,那麼的document.cookie對象變得不可用。有沒有人有任何這種方法工作/不工作的經驗?

非常感謝
斯蒂芬

附加

我很清楚地知道,這種方法需要JavaScript客戶端上啓用。我也知道其他服務器端/ JavaScript解決方案。請討論題目。

+1

它可能是不可靠的 - 但您可以將'document.cookie'測試與'navigator.cookieEnabled'結合使用。 – initall 2010-02-23 14:34:06

+0

我不知道。從措辭上來看,這個問題聽起來非常可靠。當您評估document.cookie(或!document.cooke)時,它是否始終返回正確的值?是。 它是Cookie子系統是否完全活動的指示器?不是真的。 – benc 2010-02-27 00:18:19

回答

6

在這種情況下,對我來說唯一可靠的方法就是對測試cookie使用set函數(檢查cookie是否爲已禁用,您不介意javascript問題,並且需要客戶端解決方案) ,然後一個get函數來讀回它。如果測試cookie不能被讀回,cookies就會關閉。

您可以編寫自己的實施方案,從quirksmode讀取優質資源,使用jQuery pluginout-of-box solution

1

嘗試在服務器上設置一個值,然後在客戶端上讀取它。如果啓用了Cookie,您應該可以讀取相同的值。如果不是,他們被禁用。請注意,該網站可能已啓用httpOnly。

+0

服務器端檢測是最可靠的方式 – Dapeng 2010-03-02 11:19:36

10

在XHTML文檔中,根本沒有document.cookie(直到Firefox 2,或者如果將文檔作爲application/xml發送,則永遠不會)。我必須學會痛苦,它可以在document但是設置,:

document.cookie = "foo"; 

這是有效的JS和瀏覽器聳聳肩其肩膀,並設置變量document的財產cookie。但是,在HTTP頭中轉換它的特殊魔力並沒有被調用。

簡而言之:不,您無法確定,document.cookie的缺失總是與禁用的Cookie相同,反之亦然。

+0

顯然,它也依賴於JavaScript的開啓。用戶可能已經啓用了Cookie,但關閉了JavaScript。 – 2010-02-23 13:18:46

+2

@Paul:這個問題意味着JS開啓了,或者不是?否則,如果客戶端計算機關閉,代碼也不可靠。 – initall 2010-02-23 13:26:50

+0

我沒有讀到這個問題的含義。它詢問是否使用有問題的JavaScript代碼是「可靠的」。正在使用JavaScript是次要的問題,但這就是爲什麼我將這一點作爲對我認爲是最佳答案的評論的補充,並在開始時加上了「明顯」這個詞。 (如果客戶端計算機已關閉,則無論cookie是否啓用都無關緊要,如果JavaScript已關閉,推測它仍然可以) – 2010-02-23 15:30:47

0
var gotCookie = (navigator.cookieEnabled) ? true : false; 

if(typeof navigator.cookieEnabled == 'undefined' && !gotCookie) { 
    document.cookie = 'test'; 
    gotCookie  = (document.cookie.indexOf('test') != -1) ? true : false; 
    } 

如果gotCookie == true,那麼你已經gotCookie :)

注: 時,因爲沒有Cookie設置,document.cookie似乎即使cookie被在瀏覽器中啓用不可用。這就是爲什麼我們使用document.cookie = 'test'來設置它,然後在下一行檢查它。當然,假設js已啓用。

1

Opera 7.10不會理解document.cookie,所以它不可靠。 嘗試使用這個來代替:

<script type="text/javascript"> 
var cookieEnabled=(navigator.cookieEnabled)? true : false 

//if not IE4+ nor NS6+ 
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
document.cookie="testcookie" 
cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false 
} 

//if (cookieEnabled) //if cookies are enabled on client's browser 
//do whatever 

</script> 

,與大多數瀏覽器兼容且不會使用它的那些不再使用。我已經在HTML和XHTML中使用Internet Explorer 8.0,Firefox 3.6,Google Chrome 4.0,Opera 10.10進行了測試。在Internet Explorer 8.0中使用HTML版本時,我必須確認腳本的執行情況。