2009-05-10 9 views
3

Je travaille sur un add-on Firefox qui permettra aux utilisateurs (qui font tous partie d'un groupe spécifique, ce module est très limité dans la portée de l'audience) de voir l'état de leur cookie d'authentification à partir de la barre d'état. Nous devons tous nous authentifier pour accéder aux sites liés au travail, mais nous ne recevons aucun avertissement lorsque le cookie expire, ce qui provoque des interruptions ennuyeuses et parfois drastiques dans le flux de travail. Finalement, cet ajout nous permettra de soumettre nos informations d'identification à partir de la barre d'état sans avoir à faire de rechargements ou de redirections, mais pour l'instant, je veux juste voir le statut. J'ai regardé les pages de développement de Mozilla à nsICookie, nsICookie2, nsICookieManager, etc, et il ne fait pas très clair comment tout cela entre dans JavaScript ou XUL ou autre chose.Accéder aux cookies, heureusement en JavaScript

Idéalement, je voudrais juste un moyen pour le JavaScript d'aller à l'extérieur du document et d'obtenir la chaîne de cookie pour un domaine que je spécifie. Si je pouvais le faire, cela permettrait au code d'être éventuellement transféré vers d'autres navigateurs (Safari et Chrome, en particulier). Mais si cela doit être spécifique au navigateur, alors je voudrais au moins savoir la méthode pour vérifier si le cookie existe dans Firefox sans aucun cloches et sifflements de réglage ou de suppression.

Tout simplement, je veux une façon de dire:

if (cookieExists("sample.com", CookieName)) { 
    alert("You're signed in!"); 
} else { 
    alert('Go sign in, you fool!'); 
} 

Quel est le plus facile/moyen le plus portable de le faire (navigateur côté, bien sûr)?

+0

Voir aussi cette question similaire posée dans le même temps: http: // stackoverflow. com/questions/844795/query-url-pour-log-in-status-javascript – pc1oad1etter

Répondre

4

vous pouvez utiliser le plugin jquery pour la gestion des cookies

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

ou simplement par javascript: http://www.quirksmode.org/js/cookies.html

+0

Je n'ai pas vu de toute façon pour obtenir les cookies pour un autre domaine, cependant. Mais d'autres lectures suggèrent que ce n'est pas possible, pour des raisons de sécurité. –

+1

C'est exact, vous ne pouvez pas accéder aux cookies en dehors du domaine actuel. –

1

Voici un tutoriel agréable pour working with cookies in javascript. En utilisant les fonctions de ce tutoriel, vous pourriez probablement faire quelque chose comme ceci:

if readCookie(yourCookieName != "") { 
     alert("You're signed in!"); 
else { 
     alert("Go sign in, you fool!"); 
} 

Voici les fonctions 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); 
} 
5

J'ai regardé les pages des développeurs Mozilla à nsICookie , nsICookie2, nsICookieManager, etc, et il ne fait pas très clair comment l'un d'entre eux s'intègre dans javascript ou XUL ou autre chose.

l'accès à tous les cookies de l'extension Firefox est possible et utilise les interfaces nsICookieManager et nsICookie. De code javascript dans votre extension, vous accédez au gestionnaire de cookies avec

var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager); 

et que vous pouvez parcourir tous les cookies stockés

var enum = cookieManager.enumerator; 
while (enum.hasMoreElements()){ 
    var cookie = enum.getNext(); 
    if (cookie instanceof Components.interfaces.nsICookie){ 
     // commands 
    } 
} 

maintenant, quand en référence à l'objet cookie, vous pouvez vérifier ses propriétés

cookie.host 
cookie.name 
cookie.value 
... 

défini dans l'interface nsICookie. Ce code est spécifique à Firefox et peut être exécuté en tant qu'extension de navigateur ou signed script. J'espère que mon explication a aidé un peu.

Ci-dessous je vous présente quelques liens sur l'utilisation des interfaces JS XPCOM dans les extensions:

  1. JS XPCOM
  2. Using cookies
Questions connexes