我有一些代码将用户的ID保存为cookie。它在生产中运行良好,但将代码移动到IIS7,在我的代码后面升级供应商应用程序,并将应用程序移动到IIS7中的应用程序而不是仅运行默认Web在IE中打破此cookie功能。
不幸的是,这是一款经典的ASP应用程序,所以我找不到发布工作版本的好方法。但这里有相关的部分。
梗概:
似乎正在发生的事情(仅在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?
答案 0 :(得分:0)
显然,域名中有一些weirdness with IE / IIS7和下划线。这会影响你吗?
答案 1 :(得分:0)
我最终重构了我的setCookie()
功能。我没有正确到期cookie,因为日期计算很时髦。 quirksmode createCookie()
函数工作正常。
另外,我在服务器端设置cookie时设置了路径。不知何故,prelogin和post登录页面设置的cookie的路径不同。因此,客户端脚本无法覆盖服务器端cookie,反之亦然。明确设置固定的路径。