PHP oturum IE ile çalışmıyor

12 Cevap php

I have a site made with php which uses server side sessions throughout the site.
In fact, it's a site with a user login which depends on session variables and if there were a problem with all session variables, no pages would load at all.

On the site, there's an iframe that holds a feed of little messages from other users.
Those little messages have clickable photos next to them that open the user's profile.
Now, each page requires some formatting to open the user's profile on that specific page...there's really only a few problem pages, but those pages have to have the onclick functions formatted a little differently or they break the page.
So I set a session variable on each page ($_SESSION["current_page"]) that lets the feed know how to format the clickable photos. Now Firefox, Opera, Chrome, Safari all work as they are supposed to.
But IE6 and IE7 are having problems on the pages that require special formatting.
So after pulling my hair out a bit, I eventually got around to printing my session variables form the server.
And lo and behold, on the special pages, ($_SESSION["current_page"]) is always set to "main" instead of "special1" or "special2".

I printed the same session variable in Firefox and all the other browsers I mentioned and they print out "special1" or "special2" as they're supposed to.
Can anyone think of something - possibly related to the fact that the feed is in an iframe??? - that would cause IE to treat server side session variables differently or somehow launch page "main" silently in the background?
I have checked the feed very carefully for any reference to page "main" - it doesn't seem like there's any ways it's loading that page.

Bu bana mantıklı gelmiyor.

12 Cevap

(I Fiddler kullanabilirsiniz) izleme vekil çeşit kullanırken sayfa test deneyin ve ne sayfaları tarayıcı istekleri bakın. Bu size ne oluyor için bazı ipuçları verebilir.

Ayrıca, farklı tarayıcılardan gelen istekler / yanıtları yakalamayı deneyin ve IE (istek sırası, isteklerin içeriği?) Farklı ne yaptığını görüyoruz.

Sorunu saptamak için, without (bu diğer yanıtları birinde anlatılan) OTURUMU kullanarak kodu yeniden olabilir? Belki IE diğer tarayıcılardan daha farklı sırayla sayfaları erişiyor? Belki oturum var "ana" olarak ayarlanmış olduğu anlamına gelir, birden fazla ana sayfa isteyen? Oturum değişkenleri olmadan, sayfaları birbirlerinin durumunu etkilemez.

Sunucu makinenin adını kontrol edin. '-' IE içeren makine adları ile sorunları var ya da '_' - onlar bir oturumu korumak değil! Ben geçmişte iki kez bu sorunu yaşadım ve her zaman anlamaya hafta beni alır, ve ben IE bu sabit değil şaşırdım.

Sadece hayır garip karakterler var makineyi yeniden adlandırmak! Sadece test etmek url sunucusunun IP adresini kullanabilirsiniz eğer bu çalışma alabilirsiniz.

Bazı insanlar ilginç bu soruna çözüm bulmak düşündüm. Fiddler burada kesinlikle yardımcı oldu. Fiddler sayesinde, ben (böylece hedef sayfa üzerinde ayarladıktan sonra oturum değişken anları ayarı) sayfa main.php isabet, aslında, ama sunucu kökünde bir 302 almak sonra varsaymak olduğunu görebiliyordu bir site. Bu, tüm arka planda sessizce oluyor, ve before Benim onload = "" javascript koştu.

Yani eminim şeyler on bu sayfalar bir hataya neden oldu, ancak bir felaket oldu.

işte burada: <img src= "" >

IE boş src niteliği hakkında heyecanlanıyorum ve sunucu kökünü vurmak ve sayfa hattÆnda varsaymak oldu. Ben tam Buradaki mekaniği anlamıyorum. Bu IE ya da değil (tüm sonra bozuk bir img etiketi) davranması gerekiyordu nasıl olursa ben de anlamıyorum. Bu bir hata mı?

Ben buldum üstbilgi eklendi if ('P3P: CP = "CAO PSA OUR"'); belgenizin üstüne. Bu sorun sabit görünüyor.

Ben aynı sorun var ve şimdi çözüldü.

Referans: http://www.dmitri.me/blog/ie-session-bug-is-solved/

The blank or empty attribute's values of any IMG tags cause the problem. For me, I used JavaScript to change IMG object's source to an empty value. Doing that could also make the problem.

Çoğu durumda, dosya başında bu php satır yeterli olacaktır:

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

Değilse, IE7 için siz de deneyebilirsiniz:

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');

Bu IE6 için işe yaramazsa, sen oturum kimliği GET params'ı kullanabilirsiniz:

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

Ben bunu doğru anlamak, o sayfada iframe içindeki sayfalara bir sayfa veri aktarmak için bir oturum değişkeni kullanmaya çalışıyorsunuz? ? Sadece iframe url yani CURRENT_PAGE = Special1 bir GET değişken geçmek değil - neden bu konuda gitmek için iyi bir yol görünmüyor. Ben oturum durumu dayanmaz gibi bu daha güvenilir olacağını düşünürdüm.

Oturum değişkenleri garip davranışlara neden olabilecek bir kullanıcının PC (örneğin birden çok sekmede), açık olan aynı sitenin birkaç sayfa için aynı olacağını da unutmayın.

Oturum veri sunucu tarafında değil, istemci üzerinde saklanır. Ben bu değer atanabilir diğer sayfaları, kontrol olur.

Ben ie7 aynı sorunu vardı ve bu ben ne olduğunu:

Windows Server bir IIS veya Apache kullanarak bu sorunu varsa, bunu yönlendirme önce olduğu URL olarak aynı şekilde Writed gerekir yönlendiriyorsunuz URL'ye bakın.

For example: site.com/pages/index.php redirection to site.com/Pages/index2.php is going to loose the session in IE7 because the capital letter in Pages.

Ben bu sorun vardı ve dışarı olmak benim dev kutusunda tarihe nedeniyle oldu. Firefox IE ve krom gibi yakında kuruldu olarak sona ermiş olarak oturumu görmeye, aldırmadı.

Belki de session.cookie_lifetime. Ben aynı sorun ile karşı karşıya kaldılar. I session.cookie_lifetime: 4500 session.cookie_lifetime:0 güncellendi. Bu tarayıcı kapanana kadar oturum tanımlama sona asla anlamına gelir.