Переменная Session PHP не сохраняется (хотя некоторые есть) - PullRequest
0 голосов
/ 26 января 2011

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

Сервер 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>"; 
?>

Счетчик увеличивается - работает.

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

<code>echo session_id(); echo '<pre>'; var_dump($_SESSION); echo '
'; session_write_close (); выход();

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

<?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"
        }
      }
    }
  }
}

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

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

Спасибо.

1 Ответ

0 голосов
/ 08 февраля 2011

Мне кажется, я решил эту проблему.

После того, как мое приложение обработало ключ «сохраненную_форму», который он выполняет при каждом запуске, оно удаляет его из соображений безопасности.модуль перезаписи для более хороших ссылок (модуль IIRF).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...