Доступ к файлам cookie, надеюсь, в JavaScript - PullRequest
3 голосов
/ 10 мая 2009

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

Я просматривал страницы разработчиков 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!');
 }

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

Ответы [ 3 ]

5 голосов
/ 10 мая 2009

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

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

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, вы можете проверить его свойства

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

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

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

  1. JS XPCOM
  2. Использование куки
4 голосов
/ 10 мая 2009

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

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

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

1 голос
/ 10 мая 2009

Вот хороший учебник для работы с файлами cookie в 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);
}
...