2012-02-23 28 views
6

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:

  1. 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
  2. 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
  3. 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?

+1

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. –

+0

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. –

+0

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). –

Trả lời

0

Tôi đã kết thúc việc tái cấu trúc chức năng setCookie() của mình. Tôi đã không đúng cách hết hạn các tập tin cookie vì các tính toán ngày đã sôi nổi. Hàm quirksmode createCookie() hoạt động chính xác.

Ngoài ra, tôi đặt đường dẫn trên cookie khi tôi đặt phía máy chủ. Bằng cách nào đó, các đường dẫn khác nhau đối với các cookie do trang prelogin và các trang đăng nhập đăng. Vì vậy, sau đó kịch bản khách hàng không thể ghi đè lên cookie phía máy chủ và ngược lại. Đặt đường dẫn cố định rõ ràng.

0

Rõ ràng, có một số weirdness with IE/IIS7 và gạch dưới trong tên miền. Điều này có thể ảnh hưởng đến bạn không?

+0

Không, nhưng nó thuộc loại máy chủ nội bộ của điều đó, do đó không phải là URL đủ điều kiện. Nhưng tôi đã cố gắng hoàn toàn đủ điều kiện và điều đó không giúp được gì. –