IE中的Cookie怪异

时间:2012-02-23 01:02:03

标签: javascript internet-explorer cookies asp-classic

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

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

梗概:

  1. 当用户检查“记住我”并登录时,临时cookie 已创建
  2. 当用户进行身份验证时,临时cookie被“提升”为a 永久性和临时性已过期
  3. 当用户取消选中“记住我”时,两个cookie都应该是 过期
  4. 似乎正在发生的事情(仅在IE中?)是有2个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?

2 个答案:

答案 0 :(得分:0)

显然,域名中有一些weirdness with IE / IIS7和下划线。这会影响你吗?

答案 1 :(得分:0)

我最终重构了我的setCookie()功能。我没有正确到期cookie,因为日期计算很时髦。 quirksmode createCookie()函数工作正常。

另外,我在服务器端设置cookie时设置了路径。不知何故,prelogin和post登录页面设置的cookie的路径不同。因此,客户端脚本无法覆盖服务器端cookie,反之亦然。明确设置固定的路径。