Tôi có một số mã lưu ID của người dùng dưới dạng cookie. Nó hoạt động tốt trong sản xuất, nhưng chuyển mã sang IIS7, nâng cấp ứng dụng của nhà cung cấp phía sau mã của tôi và di chuyển ứng dụng sang ứng dụng trong IIS7 thay vì chỉ chạy Default Web để phá vỡ chức năng cookie này trong IE.Kỳ lạ về cookie trong IE
Thật không may đó là ứng dụng ASP cổ điển nên tôi không thể tìm được cách hay để đăng phiên bản đang hoạt động. Nhưng đây là những phần liên quan.
Tóm tắt:
- khi kiểm tra người sử dụng "nhớ đến tôi" và đăng nhập vào nó, một cookie tạm thời được tạo ra
- khi người dùng xác thực, cookie tạm thời được "thăng chức" thành một vĩnh viễn và tạm thời hết hạn
- khi unchecks người sử dụng "nhớ đến tôi" cả cookie có nghĩa vụ phải được hết hạn
Những gì dường như đang xảy ra (chỉ trong IE?) Là có 2 cookie, và bỏ chọn hộp chỉ chạm vào một trong số chúng.
Đây là mã có liên quan. Hy vọng nó sẽ giúp :)
Mở biểu mẫu đăng nhập:
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);
}
});
Khi "nhớ đến tôi" hộp kiểm được thay đổi:
var loginForm = document.getElementById("loginForm");
if (!loginForm.RemonlineID.checked) {
setCookie("MHOLI", null, null);
setCookie("tmpMHOLI", null, null);
}
Khi biểu mẫu đăng nhập được đệ trình, thiết lập một cookie 1 ngày nếu "nhớ tôi" được chọn:
if (loginForm.RemonlineID.checked) {
setCookie("tmpMHOLI", loginForm.Login.value, 1);
}
else {
setCookie("tmpMHOLI", null, null);
}
Hàm setCookie. Vâng, tôi thấy rằng expstring
là có nhưng không bao giờ sử dụng :):
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();
}
Và sau đó một số VBScript khi người dùng làm cho nó vào ứng dụng. Tôi nghĩ rằng nó đang tạo ra một cookie thứ hai thay vì
if Request.Cookies("tmpMHOLI") <> "" then
Response.Cookies("MHOLI") = Request.Cookies("tmpMHOLI")
Response.Cookies("MHOLI").Expires = Date() + 365
Response.Cookies("tmpMHOLI") = ""
end if
Có một cái gì đó khác nhau về cách IE7/8/9 xử lý các tập tin cookie rằng điều này sẽ không làm việc? Có điều gì đó về IIS7.5 đó là tạo ra một cookie mà kịch bản khách hàng không thể liên lạc?
Vì bạn đã sử dụng jQuery, tôi có thể đề xuất (a) sử dụng các cơ sở của jQuery để xử lý mã trong khối mã 2 & 3. Có thể có một số điều lạ lẫm trên trình duyệt và jQuery sẽ có thể (được thiết kế để) sửa lỗi này.Ngoài ra, (b), hãy xem jQuery Cookie Plugin. Một lần nữa, nó có thể sửa chữa một số tomfoolery cụ thể của IE. –
Xin cảm ơn! Tôi đã cố gắng không refactor quá nhiều, vì tôi là một nhóm 1 cố gắng để có được mã này làm việc để chuyển sang một môi trường mới. –
Tôi tin tưởng, jQuery sẽ làm cho nó dễ dàng hơn, đặc biệt là cho một nhóm 1 (cùng một thỏa thuận với các dự án của tôi). –