Файлы cookie не работают в IE из Lotus Domino, Firefox и Opera OK - PullRequest
0 голосов
/ 22 августа 2011

Я использую какой-то старый, но работающий javascript в приложении Lotus Domino для установки сеанса и постоянных файлов cookie, он отлично работает в Firefox и Opera, но не работает в IE8. Если добавить HTML, чтобы остановить IE кэширование страниц, но это не имеет значения. Это код:

//Persistant and session cookies for shopping cart and 
//returning user identification
function makeCartID() {
    var part1 = Math.floor(Math.random()*900) + 1000;
    var part2 = Math.floor(Math.random()*90) + 100;
    return part1.toString() + "-" + part2.toString();
}

//Math.ceil vs Math.floor, document these
function rand(number) {
    return Math.ceil(Math.random()*number);
}

//  Function to return the value of the cookie specified by "name".
//  returns a String object containing the cookie value, or null if cookie not  found
function getCookie (name) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break; 
  }
  return null;
}

// Persistent cookie for unique visitors and latent purchases
function setCustCookies() {
    var thisCookie = getCookie("fwc_shop");
    var myValue = thisCookie;
    if( thisCookie == null) {
        //Setup the random cookie value
//      myValue = new Date();
//      var randNum = rand(100);
        myValue = makeCartID();

        //The expiry date will be 5 years for production
        //Starting with 1 day ...
        var expiryDate = new Date();
    //  expiryDate.setDate(expiryDate.getMonth() + 1);
        expiryDate.setDate(expiryDate.getDay() + 1);
        setCookie("fwc_shop", myValue, expiryDate, "/");
    }     

    // Session cookie for shopping cart, 15 minute default
    var minutes = 15;  //Testing, 60+ for production
    var session = getCookie("fwc_cart");
    var scdt = new Date();
    var sdt = new Date(scdt.getMilliseconds + (minutes * 60 * 1000));

    var sessionVal;
    if(session==null){
       sessionVal=myValue + "=" + scdt.toGMTString() + "_" + rand(100);
    }else{
       sessionVal=session;
    }
    setCookie("fwc_cart", sessionVal, sdt, "/");
}
setCustCookies();


//  Function to delete a cookie. (Sets expiration date to current date/time)
function deleteCookie (name) {
  var exp = new Date();
  exp.setTime (exp.getTime() - 1);
  var cval = getCookie (name);
  document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
//Worth a try from within script library!!
deleteCookie("fwc_persist");

Я не думаю, что это специфично для Lotus Domino, страннее всего то, что я вижу некоторые файлы cookie, которые я установил на локальном сервере, но не могу удалить их, что я, похоже, могу сделать в Firefox, это сводит меня с ума в течение последних трех дней !!

Отладчик Firefox не сообщает об ошибках и IE не находится в режиме отладки.

Обновление - Позже в тот же день не было решения проблемы с кодом javascript, но следующая формула в вычисляемом поле в поле from каждый раз устанавливает cookie-файл сеанса, его родной язык Lotus Formula, с которым у меня есть отношения любви-ненависти. но в этом случае это очень просто и на 100% надежно!

@If(@BrowserInfo("Cookies");""; @Return("Error: cookies not enabled."));
cookieName:="session";
part1 := @Text(@Round(1000 * @Random));
part2 := @Text(@Round(10000 * @Random));
cookieValue:= part1 + "-" + part2;
result:=cookieName + "="+ cookieValue + ";";
@SetHTTPHeader("Set-Cookie"; result)

ps Это не первый раз, когда я вижу проблему с неработающим javascript в IE, когда тот же код работает в Mozilla, код, о котором я думаю, был в порядке в IE5, но теперь больше не работает, когда код запускается в более поздние версии IE, кто-нибудь может пролить свет на это наблюдение?

16 сентября Я добился большого прогресса в своей корзине покупок, но теперь вышеприведенная формула ломается и не устанавливает cookie в зависимости от того, на какой странице я нахожусь. То же самое в Firefox и Opera. Я вижу файлы cookie при просмотре категорий вина и спиртных напитков, но не аксессуаров и подарочных изделий, но для обоих типов страниц используется один и тот же код ...

1 Ответ

0 голосов
/ 17 декабря 2011

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

Остальная часть решения вращалась вокруг использования агентов webqueryopen для изучения поля http_cookie, поля computed cookie и других полей cgi, связанных с браузером, чтобы определить, было ли посещение поисковым ботом или человеком, так что мне не о чем беспокоиться о корзинах для поисковых ботов.

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

...