Ошибка входа в систему на основе ajax: вызовы ajax в IE6 и IE7 удаляют данные сеанса (однако session_id сохраняется) - PullRequest
0 голосов
/ 28 марта 2010

Этот вопрос возникает после двух дней тестирования и отладки, сразу после шока, когда я увидел, что ни один из сайтов, которые я создаю с использованием входа в систему на основе ajax, не работает в IE <8 </p>

Самый упрощенный сценарий, такой:

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

Когда я нажимаю «тестовую ссылку», выполняется вызов ajax, и в результате получается alert () - ed:

IE6:

weird bullet-character (&bull;)

IE7:

Array(
)
<session_id>

IE8 / FF (ожидаемое поведение):

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

Я был бы очень признателен за некоторые указания относительно: 1. почему это происходит 2. как это исправить

Спасибо.

Ответы [ 4 ]

1 голос
/ 28 марта 2010

Убедитесь, что IE не кеширует ответ на ваш запрос, поместите его до того, как ваши почтовые вызовы будут выполнены:

$.ajaxSetup({ cache: false });
0 голосов
/ 01 апреля 2010

Попробуйте использовать относительные URL в запросе ajax. Кроме того, в ie6 / 7 вы собираетесь на «mysite.com» или «www.mysite.com». Проверьте правильность заголовка узла в запросе.

$.post('myajax.php', {action: 'test'}, function(result){alert(result);}, 'html');
0 голосов
/ 31 марта 2010

Может быть это связано с кодировкой текста? Используете ли вы UTF-8 (или любую другую кодировку) на главной странице и в скрипте ajax? Если это так, убедитесь, что вы явно указываете браузеру, какую кодировку использовать в заголовках ответа и заголовке HTML.

Может случиться, что print_r() выведет некую волшебную комбинацию символов, которая заставляет IE обнаружить неправильную кодировку.

Также попробуйте header('Content-type: text/plain');, возможно, чтобы убедиться, что IE не пытается интерпретировать его как HTML.

Еще одна вещь, которую стоит попробовать: правильно ли IE передает cookie через запрос ajax? Является ли идентификатор сессии одинаковым для главной страницы и сценария ajax? Если cookie не передается, PHP может начать новый отдельный сеанс для страницы ajax.

0 голосов
/ 29 марта 2010

Может показаться глупым Вопрос, однако вы убедились, что ваш session_start () не имеет абсолютно никаких пробелов ни в одном из сценариев? это обычно дает ошибку ...

...