Печенье странности в IE - PullRequest
6 голосов
/ 23 февраля 2012

У меня есть код, который сохраняет идентификатор пользователя в виде файла cookie.Он отлично работает в производственном процессе, но перемещение кода в IIS7, обновление приложения-поставщика за моим кодом и перемещение приложения в приложение в IIS7 вместо простого запуска по умолчанию Web нарушает эту функцию cookie в IE.

К сожалению, это классическое приложение ASP, поэтому я не могу найти хороший способ опубликовать рабочую версию.Но вот соответствующие штуки.

Сводка:

  1. когда пользователь проверяет «запомнить меня» и входит в систему, создается временный файл cookie
  2. , когда пользователь аутентифицируется, временный файл cookie имеет вид «повышен до «постоянного», и временное значение истекло
  3. , когда пользователь снимает флажок «запомнить меня», оба файла cookie должны быть просрочены

Что, похоже, происходит (только в IE?), что есть 2 куки, и снятие флажка касается только одного из них.

Вот соответствующий код.Надеюсь, это поможет:)

В форме входа в систему:

var MHOLI = Get_Cookie("MHOLI");
//Check if cookie has a value
if (MHOLI != null && MHOLI != "" && MHOLI != "null") {
    //Set login text
    $("#Login").val(MHOLI);
    //keep remember login checkbox checked
    $("#RemonlineID").attr('checked', true);
    $(document).ready(function() {
        setTimeout(function() {
            $("#Password").focus();
        }, 200);
    });
}
$(document).ready(function() {
    //test if cookies are enabled..
    Set_Cookie('test', 'testvalue', '/', '', '');
    //if cookies are disabled, disable the option to remember username
    if (!Get_Cookie('test')) {
        $('#RemonlineID').attr("disabled", true);
    }
});​

Когда флажок «запомнить меня» изменен:

var loginForm = document.getElementById("loginForm");
if (!loginForm.RemonlineID.checked) {
    setCookie("MHOLI", null, null);
    setCookie("tmpMHOLI", null, null);
}​

Когда форма входа в систему отправленаустановите 1-дневный файл cookie, если установлен флажок «запомнить меня»:

if (loginForm.RemonlineID.checked) {
    setCookie("tmpMHOLI", loginForm.Login.value, 1);
}
else {
    setCookie("tmpMHOLI", null, null);
}​

Функция setCookie.Да, я вижу, что expstring есть, но никогда не использовался:):

function setCookie(name, value, days) {
    var expireDate = new Date()
    //set "expstring" to either future or past date, to set or delete cookie, respectively
    var expstring = (typeof days != "undefined") ? expireDate.setDate(expireDate.getDate() + parseInt(days)) : expireDate.setDate(expireDate.getDate() - 5)
    document.cookie = name + "=" + value + "; expires=" + expireDate.toGMTString();
}​

А потом какой-то VBScript, когда пользователь делает это в приложении.Я думаю, что он создает второй файл cookie вместо

if Request.Cookies("tmpMHOLI") <> "" then
  Response.Cookies("MHOLI") = Request.Cookies("tmpMHOLI")
  Response.Cookies("MHOLI").Expires = Date() + 365
  Response.Cookies("tmpMHOLI") = ""
end if​

Есть ли что-то другое в том, как IE7 / 8/9 обрабатывает файлы cookie, что это не будет работать?Есть ли в IIS7.5 что-то, что создает cookie, который клиентский скрипт не может затронуть?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Я закончил рефакторинг своей функции setCookie(). У меня не было истечения срока действия файлов cookie, потому что вычисления даты были в стиле фанк Функция quirksmode createCookie() работала корректно.

Кроме того, я устанавливаю путь к файлу cookie, когда устанавливаю его на стороне сервера. Каким-то образом пути для файлов cookie, установленных на страницах prelogin и post, были разными. Таким образом, клиентский скрипт не может переопределить cookie-файл на стороне сервера и наоборот. Явная установка пути исправила это.

0 голосов
/ 29 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...