2008-11-20 50 views
14

Tôi có một trang web được tạo bằng php sử dụng các phiên phía máy chủ trong toàn bộ trang web.
Trên thực tế, đó là trang web có thông tin đăng nhập của người dùng phụ thuộc vào biến phiên và nếu có sự cố với tất cả các biến phiên, sẽ không có trang nào tải.Phiên PHP không hoạt động với IE

Trên trang web, có khung nội tuyến chứa nguồn cấp dữ liệu của ít thư từ người dùng khác.
Những thư nhỏ này có các ảnh có thể nhấp bên cạnh chúng để mở tiểu sử của người dùng.
Hiện tại, mỗi trang yêu cầu một số định dạng để mở tiểu sử của người dùng trên trang cụ thể đó ... chỉ có một số trang vấn đề, nhưng các trang đó phải có các chức năng onclick được định dạng hơi khác hoặc chúng phá vỡ trang.
Vì vậy, tôi đặt biến phiên trên mỗi trang ($_SESSION["current_page"]) cho phép nguồn cấp dữ liệu biết cách định dạng ảnh có thể nhấp. Bây giờ Firefox, Opera, Chrome, Safari tất cả các công việc như họ có nghĩa vụ phải.
Nhưng IE6 và IE7 đang gặp sự cố trên các trang yêu cầu định dạng đặc biệt.
Vì vậy, sau khi kéo tóc của tôi ra một chút, tôi cuối cùng đã có xung quanh để in các biến phiên của tôi tạo thành máy chủ.
Và lo, nhìn trên các trang đặc biệt, ($_SESSION["current_page"]) luôn được đặt thành "chính" thay vì "special1" hoặc "special2".

Tôi đã in cùng một biến phiên trong Firefox và tất cả các trình duyệt khác mà tôi đã đề cập và chúng in ra "special1" hoặc "special2" như chúng được cho là.
Có ai có thể nghĩ về điều gì đó - có thể liên quan đến thực tế là nguồn cấp dữ liệu nằm trong khung nội tuyến không ??? - Điều đó sẽ khiến IE xử lý các biến phiên phía máy chủ khác nhau hoặc bằng cách nào đó khởi chạy trang "chính" âm thầm trong nền?
Tôi đã kiểm tra nguồn cấp dữ liệu rất cẩn thận cho bất kỳ tham chiếu nào đến trang "chính" - dường như không có cách nào tải trang đó.

điều này không có ý nghĩa đối với tôi.

+0

Đối với bất kỳ ai khác có vấn đề này, tôi khuyên bạn nên đóng hoàn toàn IE và mở lại nó. Điều này đã xảy ra với tôi trong IE10, và tôi đã dành khoảng nửa giờ cố gắng tất cả các giải pháp dưới đây để không có kết quả. Khoảng 1 trong 10 lần phiên sẽ vẫn còn sống đủ lâu để tôi đăng nhập vào trang web của mình, và sau đó lại chết. Sau khi khởi động lại trình duyệt, mọi thứ đều hoạt động tốt. – mpen

Trả lời

9

Hãy thử kiểm tra trang trong khi sử dụng một số loại proxy giám sát (tôi sử dụng Fiddler) và xem các trang mà trình duyệt yêu cầu. Điều đó có thể cung cấp cho bạn một số manh mối về những gì đang xảy ra.

Ngoài ra, hãy thử chụp các yêu cầu/phản hồi từ các trình duyệt khác nhau và xem IE đang làm gì khác nhau (thứ tự yêu cầu, nội dung yêu cầu?).

Để xác định vấn đề, bạn có thể viết lại mã mà không cần bằng SESSION (được đề cập trong một trong các câu trả lời khác) không? Có thể IE đang truy cập các trang theo thứ tự khác với các trình duyệt khác? Có thể nó đang yêu cầu trang chính nhiều hơn một lần, có nghĩa là phiên var được đặt thành "chính"? Không có biến phiên, các trang sẽ không ảnh hưởng đến trạng thái của nhau.

+2

Viết lại ứng dụng web không phải lúc nào cũng là một tùy chọn. Không chỉ vậy, nhưng nó không giải quyết được vấn đề ban đầu - chỉ thay đổi mọi thứ xung quanh nó. Sean: Bạn đã bao giờ tìm thấy một nguyên nhân hay giải pháp? – Kieveli

+0

Kieveli: Điểm tốt. Tôi muốn đề xuất thay đổi thành mã SESSION-less để xem sự cố có còn tiếp diễn hay không. Nếu nó không, nó sẽ cho bạn một gợi ý nơi để tập trung. Tất nhiên, nếu ứng dụng sử dụng các phiên khá nhiều ở mọi nơi, việc viết lại nó chỉ để xác định vấn đề là không hiệu quả. – Piskvor

0

Nếu tôi hiểu chính xác, bạn đang cố sử dụng biến phiên để chuyển dữ liệu từ trang này sang trang khác trong iframe trên trang đó? Điều này dường như không phải là cách hay để tìm hiểu - tại sao không chỉ chuyển biến GET vào url iframe tức là? Current_page = special1. Tôi nghĩ rằng điều này sẽ đáng tin cậy hơn vì nó không phụ thuộc vào trạng thái phiên.

Hãy nhớ rằng các biến phiên sẽ giống nhau đối với một số trang của cùng một trang web được mở trên PC của người dùng (ví dụ: trên nhiều tab), điều này có thể gây ra hành vi kỳ lạ.

0

Dữ liệu phiên được lưu trữ ở phía máy chủ chứ không phải máy khách.Tôi sẽ kiểm tra các trang khác, nơi mà giá trị này sẽ được thiết lập.

10

IE có vấn đề về cookie với nó xử lý iFrame mà có thể gây ra vấn đề phiên bạn đề cập đến, hãy nhìn vào những liên kết này

http://adamyoung.net/IE-Blocking-iFrame-Cookies

http://gathadams.com/2007/06/25/how-to-set-third-party-cookies-with-iframe-facebook-applications/

http://nileshtrivedi.in/blog/2008/09/01/iframe-cookies-and-internet-explorer/

+4

"Sự cố" không phải là một bản tóm tắt chính xác. IE cố ý hạn chế cookie trong IFRAME miền chéo trừ khi có Chính sách P3P. – EricLaw

+0

@ EricLaw-MSFT- Một chút trễ, nhưng điều này giải thích chính xác vấn đề gần đây đã có. – DataHerder

+0

@Sijin Cảm ơn bạn rất nhiều! Bạn đã cứu ngày của tôi! – andr111

30

Kiểm tra tên của máy chủ. IE có vấn đề với tên máy có chứa '-' hoặc '_' - chúng không thể duy trì một phiên! Tôi đã có vấn đề này hai lần trong quá khứ, và nó luôn luôn đưa tôi tuần để tìm ra, và tôi bị sốc IE đã không cố định nó.

Chỉ cần đổi tên máy để không có ký tự lạ! Bạn có thể làm cho nó hoạt động nếu bạn chỉ sử dụng địa chỉ IP của máy chủ trong url để kiểm tra.

+16

Thực ra, đó là "bị hỏng như mong đợi": Tên DNS không được phép chứa dấu gạch dưới (theo RFC). Tất cả các trình duyệt khác đều chấp nhận chúng, nhưng IE, trong sự khôn ngoan vô tận của nó, chỉ im lặng xóa cookie của các trang web đó. Không có dấu hiệu, không có gì. Vô giá. – Piskvor

+1

Đó là kiến ​​thức tuyệt vời. Điều khó chịu nhất là ngay cả các công cụ phát triển của IE cũng chỉ là yên lặng. – Jasmo

+1

cảm ơn bạn vì điều này, wow ... điều này chỉ thổi tâm trí của tôi. – Petrogad

3

Tôi nghĩ một số người có thể tìm thấy giải pháp cho vấn đề này thú vị. Fiddler chắc chắn đã giúp đỡ ở đây. Nhờ có Fiddler, tôi có thể thấy rằng trên thực tế, tôi đã nhấn trang main.php (do đó thiết lập các biến phiên sau khi đặt nó trên trang đích), nhưng máy chủ đã mặc định ở đó sau khi nhận được 302 trên thư mục gốc của trang web. Tất cả điều này xảy ra âm thầm trong nền và trước khi chạy javascript của tôi onload = "".

Vì vậy, tôi đã chắc chắn điều gì đó trên các trang đó gây ra lỗi, nhưng không phải là một lỗi thảm khốc.

ở đây là: <img src= "" >

IE đã được freaking hiểu về thuộc tính src trống và nhấn root server và các mặc định cho trang chính. Tôi không hiểu đầy đủ về cơ chế xảy ra ở đây. Tôi cũng không hiểu nếu đây là cách IE có nghĩa vụ phải hành xử (nó là một thẻ img imform sau khi tất cả) hay không. Đây có phải là một lỗi?

+1

Vì lý do cũ/lịch sử, IE xử lý url trống "" là "/", dẫn đến yêu cầu HTTP cho URL gốc. Trong trường hợp của bạn, điều này là có vấn đề vì yêu cầu đó dẫn đến cài đặt cookie thay đổi trạng thái của ứng dụng của bạn. – EricLaw

+0

Chúng tôi đã dành 3 ngày để truy tìm một vấn đề về phiên. Ít nhất bây giờ tôi biết tại sao ... – jodeci

0

tôi đã cùng một vấn đề với IE7 và đây là những gì tôi làm:

Nếu bạn có vấn đề này bằng cách sử dụng IIS hoặc Apache trong Windows Server, nhìn vào URL nơi bạn đang chuyển hướng nó phải được lớn không lành mạnh trong giống như URL bạn đang ở trước khi chuyển hướng.

Ví dụ: site.com/ trang /index.php chuyển hướng đến site.com/ Trang /index2.php sẽ mất phiên trong IE7 vì chữ hoa trong trang .

0

Có thể là session.cookie_lifetime. Tôi đã phải đối mặt với cùng một vấn đề. Tôi đã cập nhật session.cookie_lifetime: 4500 thành session.cookie_lifetime:0. Điều này có nghĩa là cookie phiên không bao giờ hết hạn cho đến khi trình duyệt tắt.

3

Trong hầu hết các trường hợp, đây dòng php tại tập tin khởi điểm sẽ là đủ:

header('P3P: CP=”NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM”'); 

Nếu nó không phải là, đối với IE7 bạn cũng có thể thử:

header('P3P: CP=”NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM”'); 

header('Set-Cookie: SIDNAME=ronty; path=/; secure'); 

header('Cache-Control: no-cache'); 

header('Pragma: no-cache'); 

Và nếu điều đó không' t làm việc cho IE6, bạn có thể sử dụng các tham số GET cho ID phiên:

header('location: land_for_sale.php?phpSESSID='.session_id()); 
+0

Điều này làm gì? – Philipp

1

Tôi gặp sự cố này và đó là do ngày trên hộp dev của tôi bị hết. Firefox không quan tâm, IE và Chrome đã nhìn thấy phiên như đã hết hạn ngay sau khi nó được thiết lập.

2

Tôi tìm thấy nếu bạn đã thêm header('P3P: CP="CAO PSA OUR"'); vào đầu tài liệu của mình. Dường như đã khắc phục được sự cố.

1

Tôi có cùng một vấn đề và nó đã được giải quyết ngay bây giờ.

Giá trị thuộc tính trống hoặc trống của bất kỳ thẻ IMG nào gây ra sự cố. Đối với tôi, tôi đã sử dụng JavaScript để thay đổi nguồn của đối tượng IMG thành một giá trị rỗng. Làm điều đó cũng có thể gây ra vấn đề.

Các vấn đề liên quan