[英]Accessing cookies, hopefully in JavaScript
我正在開發一個Firefox插件,允許用戶(所有用戶都是特定組的一部分;此插件在受眾范圍內非常有限)從狀態欄查看其身份驗證cookie的狀態。 我們都必須進行身份驗證才能訪問與工作相關的站點,但是當cookie過期時我們不會收到任何警告,因此這會導致工作流程中出現煩人且有時嚴重的中斷。 最后,這個添加將允許我們從狀態欄提交我們的憑據,而不必去做任何重新加載或重定向,但是現在,我只是想看到它顯示狀態。
我一直在查看nsICookie,nsICookie2,nsICookieManager等的Mozilla開發人員頁面,它並沒有非常清楚地知道它是如何適應JavaScript或XUL或其他任何東西的。
理想情況下,我只是想讓JavaScript走出文檔並獲取我指定的域的cookie字符串。 如果我能做到這一點,它將允許代碼可能被移植到其他瀏覽器(特別是Safari和Chrome)。 但是,如果這必須是特定於瀏覽器的,那么我至少想知道檢查cookie是否存在於Firefox中的方法,而沒有任何設置或刪除的功能。
簡單地說,我想要一種說法:
if (cookieExists("sample.com", CookieName)) {
alert("You're signed in!");
} else {
alert('Go sign in, you fool!');
}
什么是最簡單/最便攜的方式(當然是瀏覽器方面)?
我一直在查看nsICookie,nsICookie2,nsICookieManager等的Mozilla開發人員頁面,它並沒有非常明確地了解它是如何適應javascript或XUL或其他任何內容的。
可以訪問Firefox擴展中的所有cookie,並使用nsICookieManager和nsICookie接口。 從您的擴展程序中的JavaScript代碼,您可以訪問cookie管理器
var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
而且你可以迭代所有存儲的cookie
var enum = cookieManager.enumerator;
while (enum.hasMoreElements()){
var cookie = enum.getNext();
if (cookie instanceof Components.interfaces.nsICookie){
// commands
}
}
現在,當引用cookie對象時,您可以檢查其屬性
cookie.host
cookie.name
cookie.value
...
在nsICookie界面中定義。 此代碼特定於Firefox,可以作為瀏覽器擴展或簽名腳本運行 。 希望我的解釋有所幫助。
下面我介紹一些在擴展中使用JS XPCOM接口的鏈接:
你可以使用jquery插件進行cookie處理
http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/
或者只是通過javascript: http : //www.quirksmode.org/js/cookies.html
這是一個很好的教程,用於在JavaScript中使用cookie 。 使用該教程中的函數,您可能會執行以下操作:
if readCookie(yourCookieName != "") {
alert("You're signed in!");
else {
alert("Go sign in, you fool!");
}
以下是cookie功能:
function readCookie(name) {
var ca = document.cookie.split(';');
var nameEQ = name + "=";
for(var i=0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return "";
}
function createCookie(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function eraseCookie(name) {
createCookie(name, "", -1);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.