[英]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.