访问cookie,希望用JavaScript

时间:2009-05-10 05:00:37

标签: javascript cookies xul add-on

我正在开发一个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!');
 }

最简单/最便携的方法是什么(当然是浏览器方面)?

3 个答案:

答案 0 :(得分:5)

  

我一直在查看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,可以作为浏览器扩展或signed script运行。希望我的解释有所帮助。

下面我将介绍在扩展中使用JS XPCOM接口的一些链接:

  1. JS XPCOM
  2. Using cookies

答案 1 :(得分:4)

您可以使用jquery插件进行cookie处理

http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/

或只是通过javascript: http://www.quirksmode.org/js/cookies.html

答案 2 :(得分:1)

这是 working with cookies in javascript 的精彩教程。使用该教程中的函数,您可能会执行以下操作:

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);
}