Xpoint
   [напомнить пароль]

Не работают сессии prototype+ajax+IE

Метки: [без меток]
2007-08-06 12:04:32 [обр] Валера(6/24)[досье]

Выполняю Ajax-запрос c использованием библиотеки prototype (v. 1.5.1.1), frontend описывать не буду там все как обычно, вот что в backend

if (!session_id()) {
   session_start();
}
header('Content-Type: text/plain; charset=windows-1251');
foreach($_POST['id'] as $key => $val) {
    if (intval($val)) {
        $_SESSION['zakaz'][$key] = $val;
    }
}
echo 'Какой-то текст';

Комментарий:
Массив $_POST['id'] существует, там находятся пары число => число, в Mozilla все работает "на ура", после запроса вывожу alert(transport.responseText), в Mozilla и в IE alert выводит 'Какой-то текст', все правильно, но массив $_SESSION['zakaz'] заполняется только в Mozilla, в IE он остается пустой. Путь к backend правильный, с кэшированием борюсь при помощи ?rand=+Math.random() в пути к backend.

Вопрос соответственно в чем может быть ошибка?

спустя 2 часа 12 минут [обр] Евгений Иванов(0/6)[досье]
  1. от кеширования нужно вот так

http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");

  1. сессии нужно вот так

$abc = session_name(); if (isset($$abc)) session_start();

спустя 23 минуты [обр] Валера(6/24)[досье]
Евгений Иванов[досье],
  1. от кеширования нужно вот так http_request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    1. сессии нужно вот так
$abc = session_name(); if (isset($$abc)) session_start();
  1. Про кэширование я, наверное, зря упомянул, потому что данные все равно передаются методом POST.
  2. По сути это ничего не меняет if(!session_id()) там стоит перед session_start() или просто @session_start();, сессия запускается, вопрос в другом: почему не присваиваются значения сессионным переменным в IE? Потому что в Mozilla, как я уже говорил, все работает хорошо.
спустя 18 минут [обр] Давид Мзареулян(536/1003)[досье]
Значения сессионным переменным присваиваются не «в IE», а на сервере. Так что ищите ошибку всё-таки на этапе передачи. Например, проверьте, правильно ли передаётся сессионная кука при ajax-запросе.
спустя 42 минуты [обр] Валера(6/24)[досье]
сообщение промодерировано

Давид Мзареулян[досье],

Значения сессионным переменным присваиваются не «в IE», а на сервере.

Я знаю, поэтому и удивился.

Например, проверьте, правильно ли передаётся сессионная кука при ajax-запросе.

А вот здесь, если можно, поподробнее.

спустя 2 минуты [обр] Валера(6/24)[досье]

Давид Мзареулян[досье],

Значения сессионным переменным присваиваются не «в IE», а на сервере.

Удивился в смысле того что различий не должно быть так как сессии обрабатываются сервером, просто не точно выразился когда сказал что "не присваиваются значения сессионным переменным в IE"

спустя 17 минут [обр] Валера(6/24)[досье]
Давид Мзареулян[досье], вы правы у меня используются cookie для хранения session id, и в случае с IE они не передаются. Может тогда подскажете как можно исправить ситуацию?
спустя 3 часа 53 минуты [обр] Алексей Севрюков(162/1280)[досье]
Валера[досье] в IE куки включены? Если включены то просто сделайте обычный скриптик который ставит и читает куку и позапускайте его в IE и расскажите что получится.
спустя 12 часов [обр] Валера(6/24)[досье]

Алексей Севрюков[досье], только что проверил, скрипт

setcookie('mycook', 'Valera xpoint test');

if (isset($_COOKIE)) {
    print_r($_COOKIE);
}

работает

спустя 3 часа 24 минуты [обр] Валера(6/24)[досье]
сообщение промодерировано
хм, странно, решил проделать то же самое только с помощью синхронного запроса, то есть на странице обычная форма, которая передается методом POST на сервер, где в сессию пишутся некие переменные, затем идет редирект на ту же самую страницу и на ней эти сесссионные переменные выводятся - результат тот же! А именно, в Mozilla все работает, а в IE нет. В .htaccess стоит php_value session.use_trans_sid 0, то есть id сессии хранится в COOKIE. Как вы считаете, в чем может быть проблема?
спустя 11 минут [обр] Валера(6/24)[досье]
Почему-то пропадает идентификатор сессии в COOKIE в IE
спустя 15 минут [обр] Валера(6/24)[досье]
Еще странно, что на удаленном сервере все озвученные варианты работают правильно, почему на локальном не хочет, и именно в IE - непонятно
спустя 4 часа 10 минут [обр] Давид Мзареулян(536/1003)[досье]
Валера[досье] Попробуйте универсальный метод борьбы с глюками IE — очистите у себя его кэш временных файлов.
спустя 26 минут [обр] Валера(6/24)[досье]
сообщение промодерировано
Давид Мзареулян[досье], почистил, даже историю посещений на всякий случай удалил - не помогло.
спустя 5 месяцев [обр] Евгений[досье]
Господа, проблема так и не была решена? Столкнулся с ней тоже, только на библиотеке ExtJS. Могу добавить, что сервер (у меня Apache) создает новый файл сессии, когда осуществляется ajax-запрос в IE. Проблема именно в cookie.
спустя 1 час 50 минут [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
а почему бы Вам не перехватить трафик между клиентом и сервером? IMHO все станет ясно...
спустя 2 года 9 месяцев [обр] Евгений[досье]
Передавайте информацию о сессии явно в запросе в виде: имя_сессии=идентификатор_сессии то есть session_name=session_id
Powered by POEM™ Engine Copyright © 2002-2005