У меня есть код, который сохраняет идентификатор пользователя в виде файла cookie.Он отлично работает в производственном процессе, но перемещение кода в IIS7, обновление приложения-поставщика за моим кодом и перемещение приложения в приложение в IIS7 вместо простого запуска по умолчанию Web нарушает эту функцию cookie в IE.
К сожалению, это классическое приложение ASP, поэтому я не могу найти хороший способ опубликовать рабочую версию.Но вот соответствующие штуки.
Сводка:
- когда пользователь проверяет «запомнить меня» и входит в систему, создается временный файл cookie
- , когда пользователь аутентифицируется, временный файл cookie имеет вид «повышен до «постоянного», и временное значение истекло
- , когда пользователь снимает флажок «запомнить меня», оба файла 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, который клиентский скрипт не может затронуть?