IE中的Cookie怪异

Cookie weirdness in IE

本文关键字:怪异 Cookie 中的 IE      更新时间:2023-09-26

我有一些代码将用户ID保存为cookie。它在生产中运行良好,但将代码移动到IIS7,在我的代码后面升级供应商应用程序,并将应用程序移动到IIS7中的应用程序,而不仅仅是运行默认Web会破坏IE中的cookie功能。

不幸的是,这是一个经典的ASP应用程序,所以我找不到发布工作版本的好方法。但以下是相关的部分。

简介:

  1. 当用户选中"记住我"并登录时,一个临时cookie已创建
  2. 当用户进行身份验证时,临时cookie将"升级"为永久的,临时已过期
  3. 当用户取消选中"记住我"时,两个cookie都应该是已过期

似乎发生了什么(只是在IE中?)是有两个cookie,而取消复选框只接触其中一个。

这是相关代码。希望有帮助:)

登录表单上:

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的问题?

显然,IE/IIS7和域名中的下划线有一些奇怪之处。这会影响你吗?

我最终重构了setCookie()函数。我没有正确地使饼干过期,因为日期计算很古怪。怪癖模式createCookie()函数工作正常。

此外,当我在服务器端设置cookie时,我在cookie上设置了路径。不知怎的,登录前和登录后页面设置的cookie的路径不同。因此,客户端脚本无法覆盖服务器端cookie,反之亦然。明确设置路径解决了这个问题。