ajax tabanlı oturum açma başarısız olur: IE6 ve IE7 ajax çağrıları (session_id ancak tutulur) oturum verileri silmek

4 Cevap php

Bu soru doğru şoktan sonra görüyorum vardı, test ve hata ayıklama iki gün sonra gelir IE'de

En basitleştirilmiş senaryo bu si:

1. mypage.php :

session_start();
$_SESSION['mytest'] = 'x';

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">           
    </script>

    <script type="text/javascript">     
        function loadit() {
            $.post('http://www.mysite.com/myajax.php', {action: 'test'}, function(result){alert(result);}, 'html');
        }
    </script>


    <a href="javascript:void(0);" onclick="loadit(); return false;">test link</a>

2. myajax.php

session_start();
print_r($_SESSION);
print session_id();

Ben "test" bağlantısını tıkladığınızda, ajax çağrısı yaptı ve sonuç ()-ed uyarı olduğunu:

IE6:

weird bullet-character (&bull;)

IE7:

Array(
)
<session_id>

IE8/FF (Expected behaviour):

Array(
    [mytest] => 'x'
)
<session_id>

I would really appreciate some pointers regarding: 1. why this happens 2. how to fix it

Teşekkür ederim.

4 Cevap

Emin IE isteğinizden yanıtı önbelleğe değil emin olun, yazınızın önce bu koymak aramalar çalıştırın:

$.ajaxSetup({ cache: false });

Aptal bir soru gibi görünebilir, ancak sizin session_start () komut ya kesinlikle hiçbir boşluk olduğunu doğruladıktan? Bu genellikle bir hata verecektir ...

Ajax isteği göreceli adresler kullanmayı deneyin. Ayrıca, IE6 / 7 'sen' mysite.com 'olacak ya da' www.mysite.com '. Ana bilgisayar üstbilgisi isteği doğru olup olmadığını kontrol edin.

$.post('myajax.php', {action: 'test'}, function(result){alert(result);}, 'html');

Bu metin kodlama ile ilgili bir şey olabilir mi? Eğer UTF-8 (veya ne olursa olsun kodlama), ana sayfa ve ajax komut hem de kullanıyor musunuz? Eğer öyleyse, explicitely yanıt başlıkları ve HTML kafa kullanmak için kodlama tarayıcı söylüyorum emin olun.

Bu sadece print_r() IE yanlış kodlama tespit yapan bazı karakterlerin sihirli birleşimi çıkış olur ki olabilir.

Ayrıca IE HTML olarak yorumlamak olmadığından emin olmak için, header('Content-type: text/plain'); belki deneyin.

Denemek için bir şey daha: IE ajax isteği ile doğru tanımlama geçen var mı? Oturum Kimliği ana sayfa ve ajax komut için aynı mıdır? Çerez geçirilen değilse, PHP ajax sayfa için yeni, ayrı bir oturum başlangıç ​​olabilir.