IE中的Cookie怪异
Cookie weirdness in IE
我有一些代码将用户ID保存为cookie。它在生产中运行良好,但将代码移动到IIS7,在我的代码后面升级供应商应用程序,并将应用程序移动到IIS7中的应用程序,而不仅仅是运行默认Web会破坏IE中的cookie功能。
不幸的是,这是一个经典的ASP应用程序,所以我找不到发布工作版本的好方法。但以下是相关的部分。
简介:
- 当用户选中"记住我"并登录时,一个临时cookie已创建
- 当用户进行身份验证时,临时cookie将"升级"为永久的,临时已过期
- 当用户取消选中"记住我"时,两个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,反之亦然。明确设置路径解决了这个问题。
相关文章:
- 在jquery中为显示/隐藏设置cookie
- 按下按钮时保存cookie
- 如何在Analytics.js中始终了解最新的cookie过期时间
- php httponly cookie在浏览器关闭时被删除
- 如何在提交表单时将PHP变量传递到Javascript cookie中
- 导航菜单-悬停时的背景行为怪异
- CORS-服务器端cookie没有保存在chrome浏览器上
- 如何为后台更改程序代码设置cookie
- 如何从另一个域加载cookie
- 使用jquery cookie的第三方cookie
- 无法在基于Cordova的应用程序中读取Set Cookie标头
- 如何在Javascript中将单选按钮值保存到cookie中
- SetInterval在javascript对象中表现怪异
- cookie加载事件页面重定向
- MVC C#从jQuery和JSON.stringify创建的cookie中读取值
- 为什么可以't我在谷歌浏览器中返回cookie
- 如何使用单选按钮设置cookie值
- PhantomJS(vs nightwatch.js)设置cookie错误
- 如何照顾CSRF&单页应用程序中不使用cookie的XSS攻击
- IE中的Cookie怪异