2009-05-10 4 views
3

Я работаю над надстройкой Firefox, которое позволит пользователям (все из которых являются частью определенной группы, это дополнение очень ограничено в области аудитории), чтобы увидеть статус их cookie проверки подлинности из строки состояния. Мы все должны пройти аутентификацию, чтобы получить доступ к сайтам, связанным с работой, но мы не получаем предупреждения, когда файл cookie истекает, поэтому это приводит к раздражающим и иногда резким прерываниям в работе. В конце концов, это добавление позволит нам отправлять наши учетные данные из строки состояния без необходимости переходить на любые перезагрузки или перенаправления, но пока я просто хочу, чтобы он отображал статус.Доступ к файлам cookie, надеюсь, в JavaScript

Я смотрел страницы разработчиков Mozilla в nsICookie, nsICookie2, nsICookieManager и т. Д., И не имеет особого смысла, как любой из них вписывается в 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!'); 
} 

Что это самый простой/самый портативный способ сделать это (на стороне браузера, конечно)?

+0

Также см этот же вопрос задал примерно в то же время: HTTP: // StackOverflow. com/questions/844795/query-url-for-log-in-status-javascript – pc1oad1etter

ответ

4

вы можете использовать JQuery плагин для обработки печенья

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

или просто через JavaScript: http://www.quirksmode.org/js/cookies.html

+0

Я все равно не видел, чтобы получить файлы cookie для другого домена. Но дальнейшее чтение предполагает, что это невозможно по соображениям безопасности. – 2009-05-10 05:36:54

+1

Правильно, вы не можете получить доступ к файлам cookie за пределами текущего домена. –

1

Вот хороший учебник для working with cookies in javascript. Использование функций из этого урока, вы могли бы, вероятно, сделать что-то вроде этого:

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

Вот печенье функции:

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

Я смотрел на страницах разработчиков Mozilla в nsICookie , nsICookie2, nsICookieManager и т. д., и это не дает четкого представления о том, как любой из них вписывается в javascript или XUL или что-то еще.

Доступ ко всем файлам cookie из расширения Firefox возможен и использует интерфейсы nsICookieManager и nsICookie. Из JavaScript кода в расширении, вы получаете доступ к менеджеру печенья с

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

и чем вы можете перебрать все хранящегося печенье

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

сейчас, при наличии ссылки на объект печенья вы можете проверить его свойство

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

, определенный в nsICookie Интерфейс. Этот код является специфичным для Firefox и может быть запущен как расширение браузера или signed script. Надеюсь, мое объяснение немного помогло.

Ниже я привожу некоторые ссылки на использование XPCOM интерфейсов JS в расширениях:

  1. JS XPCOM
  2. Using cookies
Смежные вопросы