Tôi có một quirk lạ với cookie trong IE. Khi người dùng đăng nhập vào trang web, tôi tạo một id phiên mới và do đó cần phải ghi đè lên cookie. Dòng chảy cơ bản là:Cookie không gia hạn/ghi đè trong IE
- Khách hàng đi vào
https://secure.example.com/users/login
trang, tự động nhận một phiên id - POSTS khách hàng thông tin đăng nhập với cùng địa chỉ
Khách hàng nhận các tiêu đề thiết lập cookie sau cùng với một chuyển hướng 302 để
https://secure.example.com/users/mypage
:CAKEPHP = đã xóa; hết hạn = CN, 05-Apr-2009 04:50:35 GMT; đường dẫn =/
CAKEPHP = 98hnIO23 ...; hết hạn = Thứ Hai, 12 tháng 4 năm 2010 04:50:36 GMT; path = /; an toànKhách hàng được yêu cầu truy cập
https://secure.example.com/users/mypage
, trình bày id phiên mới.
Tính năng này hoạt động trên tất cả các trình duyệt, ngoại trừ IE (được thử nghiệm trong 7 & 8). IE giữ lại id phiên cũ, không được xác thực và được chuyển hướng trở lại trang đăng nhập. Nó hoạt động trên môi trường thử nghiệm cục bộ của tôi (sử dụng chứng chỉ tự ký tại https://localhost:8443/...
), nhưng không hoạt động trên máy chủ trực tiếp.
Tôi đang sử dụng CakePHP và chỉ cần phát hành $this->Session->renew()
, sản xuất các tiêu đề cookie ở trên.
Bất kỳ ý tưởng nào về cách yêu cầu IE chấp nhận cookie mới?
Đây là tiêu đề đầy đủ:
HTTP/1.0 302 Moved Temporarily
Date: Thu, 08 Apr 2010 02:54:30 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: CAKEPHP=deleted; expires=Wed, 08-Apr-2009 02:54:30 GMT; path=/
Set-Cookie: CAKEPHP=d55c...; expires=Thu, 15 Apr 2010 02:54:31 GMT; path=/; secure
Last-Modified: Thu, 08 Apr 2010 02:54:30 GMT
Location: https://secure.example.com/users/mypage
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
Tôi nghĩ rằng tôi đã tìm thấy các vấn đề: IE đang gửi hai cookie của tên giống hệt nhau. Đây là yêu cầu tiếp theo đối với máy chủ:
GET /users/mypage HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, */ *
Referer: https://secure.example.com/users/login
Accept-Language: en-gb
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: secure.example.com
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: CAKEPHP=19c6...; CAKEPHP=d55c...
Lưu ý rằng nó sẽ gửi hai cookie, cookie nhận được sau khi đăng nhập, nhưng cũng là cookie cũ. Nó đã nhận được một cái cũ ở trang chính example.com
, được thiết lập với path=/
. Nó cũng gửi nó cho các yêu cầu đến secure.example.com
. Nó không được thay thế bằng tiêu đề ở trên, thay vào đó nó thêm nó làm cookie bổ sung. Làm thế nào tôi có thể ngăn chặn nó làm điều đó?
Có thể thử xóa cụ thể cookie cũ trước khi tạo cookie mới? –
@ David Tôi nghĩ đó là những gì tôi đang làm. Làm thế nào khác tôi sẽ làm điều đó trong cùng một tiêu đề? – deceze