簡體   English   中英

訪問cookie,希望用JavaScript

[英]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接口的鏈接:

  1. JS XPCOM
  2. 使用cookies

你可以使用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.

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