2011-01-25 4 views
0

Мне не удалось выяснить эту проблему - это просто не имеет никакого смысла.PHP переменная сеанса не сохраняется (хотя некоторые из них)

Сервер является PHP 5.2.6 работает на Windows NT PDP-IIS 5.2 сборки 3790.

Сначала я подтвердивших сессии работают через этот тестовый сценарий:

<?php 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0; 
echo "Counter ".$_SESSION['counter']++.".<br><a href=".$_SERVER['PHP_SELF'].">reload</a>"; 
?> 

приращений

счетчик - это работает.

Мой сайт использует пользовательский встроенный фреймворка (я написал), и я положил последний код функции приложения к этому для целей тестирования:

echo session_id(); echo '<pre>'; var_dump($_SESSION); echo '</pre>'; 
session_write_close(); exit(); 

Первые несколько строк этого файла являются :

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
session_start(); 

Сессия дампов и выглядит так, как ожидалось. Теперь я иду на сервер и открываю файл сеанса - и результат, похоже, зависит от того, какой браузер я использую. Для Chrome и Safari файл сеанса пуст. Для Opera и IE8 файл сеанса выглядел отлично. Я доберусь до FireFox через минуту, но в этот момент FireFox оказался прекрасным.

Таким образом, для целей тестирования сразу после session_start() Я добавил следующие строки:

$_SESSION['bogus'] = -5; 
$_SESSION['test'] = 'other'; 

Я закрыл браузеры и попытался снова на сайт, чтобы я мог быть уверен, что у меня был новый сеанс. Снова файлы сеансов Opera и IE8 оказались прекрасными. У Chrome и Safari были «фиктивные» и «тестовые» значения, но мое другое значение SESSION отсутствовало. FireFox сначала имел ту же проблему, что и Chrome и Safari, - но после обновления страницы, остальная часть сессии появилась. Обновление не помогло Chrome или Safari.

Вот что var_dump выглядит на данный момент:

array(3) { 
    ["bogus"]=> 
    int(-5) 
    ["test"]=> 
    string(5) "other" 
    ["saved_form"]=> 
    array(1) { 
    ["dgvSJM"]=> 
    array(4) { 
     ["method"]=> 
     string(4) "post" 
     ["processor"]=> 
     string(0) "" 
     ["formid"]=> 
     string(10) "searchForm" 
     ["fields"]=> 
     array(2) { 
     ["searchTerm"]=> 
     array(5) { 
      ["label"]=> 
      string(10) "SearchTerm" 
      ["type"]=> 
      string(6) "search" 
      ["required"]=> 
      bool(false) 
      ["multiple"]=> 
      bool(false) 
      ["selectempty"]=> 
      string(6) "B5BMXw" 
     } 
     ["formInput_0"]=> 
     array(5) { 
      ["label"]=> 
      string(0) "" 
      ["type"]=> 
      string(6) "submit" 
      ["required"]=> 
      bool(false) 
      ["multiple"]=> 
      bool(false) 
      ["selectempty"]=> 
      string(6) "TkZUfo" 
     } 
     } 
    } 
    } 
} 

я создал другой сайт с другой подобласти, и скопировал мой код точно над - и он прекрасно работает «saved_form» показывает вверх отлично в файлы сеанса. Поэтому я попытался удалить оригинальный сайт и воссоздать его - это не помогло.

Кто-нибудь знает, что происходит и/или как я могу это исправить?

Спасибо.

+0

Вы пытались очистить кеш/куки в проблемных браузерах? –

+0

Да на самом деле, хотя это не помогло. Хотя я не уверен, как кэш/файлы cookie повлияют на файл сеанса на сервере. Проводка cookie сеанса передается - сеанс просто не сохраняется должным образом. – Chris

ответ

0

Я считаю, что я решил эту проблему.

После того, как мое приложение обрабатывает ключ «saved_form», который он выполняет при каждом запуске, он удаляет его по соображениям безопасности.

Я использую модуль перезаписи для более удобных ссылок (модуль - IIRF).

Здесь возникла проблема - хотя это не ошибка модуля, только мои правила.

После того, как страница была отображена и сеанс сохранен - ​​браузер сделал другой запрос favicon.ico, однако правила, которые я установил, вызвали этот запрос, чтобы получить доступ к моему приложению, а форма обработана и удалена из сеанса - странное поведение, которое я видел. Я добавил правило, чтобы игнорировать его, и он снова работает.

Смежные вопросы