簡體   English   中英

是!document.cookie可靠嗎?

[英]Is !document.cookie reliable?

我想知道使用以下Javascript代碼是否可靠:

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

我已經在IE,Firefox和Chrome中對此進行了測試,看來當您禁用cookie時,document.cookie對象變得不可用。 有沒有人有這種方法工作/不工作的經驗?

非常感謝
斯蒂芬

額外

我很清楚這種方法需要在客戶端上啟用JavaScript。 我也知道其他服務器端/ JavaScript解決方案。 請討論繼續討論主題。

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

document.cookie = "foo";

這是有效的JS,瀏覽器聳聳肩並設置變量document的屬性cookie 但是在HTTP標頭中轉換它的特殊魔法不會被調用。

簡而言之:不,你不能確定, document.cookie的缺席總是與禁用的cookie相同,反之亦然。

在這種情況下我唯一可靠的方法(檢查cookie是否被禁用 ,你不介意javascript問題,需要客戶端解決方案)是使用set函數測試cookie,然后獲取get函數讀回來。 如果無法回讀測試cookie,則會關閉cookie。

您可以編寫自己的實現,從quirksmode讀取一個很好的資源,使用jQuery插件開箱即用的解決方案

嘗試在服務器上設置一個值,然后在客戶端上讀取它。 如果啟用了cookie,您應該能夠讀取相同的值。 如果沒有,他們被禁用。 請注意,該站點可能已啟用httpOnly。

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版本時,我必須確認腳本的執行。

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時,即使在瀏覽器中啟用了cookie, document.cookie似乎也不可用。 這就是為什么我們用document.cookie = 'test'設置它,然后在下一行檢查它。 當然,假設啟用了js。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM