Legacy Symfony project: PHP Предупреждение: session_start (): идентификатор сессии слишком длинный или содержит недопустимые символы - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь развернуть устаревший проект Symfony 1.4 (на самом деле Symfon 1.5 через FriendsOfSymfony1 [1]) в Vagrant Box с Ubuntu 18.x. Моя PHP версия - 7.2.x (см. [2]) Все работает нормально, сайт загружается, но я получаю эту ошибку (и не могу завершить вход на устаревший сайт):

[ Пт Фев 07 14: 51: 53.880189 2020] [php7: warn] [pid 2831] [client 10.0.2.2:63895] PHP Внимание: session_start (): идентификатор сессии слишком длинный или содержит недопустимые символы, допустимо символы: az, AZ, 0-9 и '-,' в /home/vagrant/swdev/lib/vendor/lexpress/symfony1/lib/storage/sfSessionStorage.class.php в строке 95, реферер: http://127.0.0.1: 8080 / frontend_dev.php / registration /

[Пт, 07.02.14: 51: 53.880478 2020] [php7: warn] [pid 2831] [клиент 10.0.2.2:63895 ] PHP Предупреждение: session_start (): не удалось прочитать данные сеанса: файлы (путь: / var / lib / php / session) в / home / vagrant / swdev / lib / vendor / lexpress / symfony1 / lib / storage / sfSessionStorage .class. php в строке 95, реферер: http://127.0.0.1: 8080 / frontend_dev.php / registration /

Здесь уже есть обсуждение: идентификатор сессии слишком long или содержит недопустимые символы, допустимые символы: az, AZ, 0-9 и '-,' Но это не решает мою проблему.

Соответствующий фрагмент кода (строка 95) находится здесь:

https://github.com/FriendsOfSymfony1/symfony1/blob/d9e3f17e246ed90590c4e5175f1cec39f4a68254/lib/storage/sfSessionStorage.class.php#L95

Код, который устанавливает session_id, находится в том же файле, строка 52 и далее:

  public function initialize($options = null)
  {
    $cookieDefaults = session_get_cookie_params();

    $options = array_merge(array(
      'session_name'            => 'symfony',
      'session_id'              => null,      // <=============== HERE
      'auto_start'              => true,
      'session_cookie_lifetime' => $cookieDefaults['lifetime'],
      'session_cookie_path'     => $cookieDefaults['path'],
      'session_cookie_domain'   => $cookieDefaults['domain'],
      'session_cookie_secure'   => $cookieDefaults['secure'],
      'session_cookie_httponly' => isset($cookieDefaults['httponly']) ? $cookieDefaults['httponly'] : false,
      'session_cache_limiter'   => null,
    ), $options);

    // initialize parent
    parent::initialize($options);

Эта ссылка упоминает, что это проблема PHP 7.1 (у меня есть PHP 7.2 !?), и что вы не можете использовать null в качестве session_id (как в коде выше). Поэтому я изменил

'session_id' => null,

на

'session_id' => '',

, затем очистил кеширование с помощью ./symfony cc, затем перезапустил apache, но еще: я получаю PHP идентификатор повторного сеанса предупреждения.

связанный с Memcached?

Может быть связан: просматривая устаревший код, я понимаю, что хранилище сеансов определено в моем файле factories.yml вот так:

(snip)

  storage:
    class: sfCacheSessionStorage
    param:
      session_name: prx
      cache: 
        class: sfMemcacheCache #[required] define the cache strategy
        param:
          servers: # Array of servers
            localserver:
              host: localhost # hostname or IP of mamcache server
              port: 11211 # default memcache port

(snip)

Memcached уже установлен и работает:

vagrant@ubuntu-bionic:~/swdev$ ps aux | grep -i memc
memcache  1002  0.0  0.3 424764  3036 ?        Ssl  13:50   0:01 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
vagrant   3289  0.0  0.1  13136  1108 pts/0    S+   15:42   0:00 grep --color=auto -i memc

Сноски

[1] Вместо Symfony 1.4 Я использую обновление от FriendsOfSymfony1

https://github.com/FriendsOfSymfony1/symfony1

[2] PHP Версия

PHP 7.2.24-0ubuntu0.18.04.2

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Удаление файлов cookie браузера (подсказка из [1]), похоже, решило проблему. Но теперь у меня есть другая ошибка [2]. Но это другой вопрос по SO.

[1] См. { ссылка }

[2] Следующая ошибка

[Пт Фев 07 18: 22: 01.701138 2020] [php7: предупреждение] [pid 3200] [клиент 10.0.2.2:59612] PHP Предупреждение: ini_set (): сеанс активен. Вы не можете изменить настройки ini модуля сеанса в это время в /home/vagrant/swdev/lib/vendor/lexpress/symfony1/lib/user/sfBasicSecurityUser.class.php в строке 257

И затем, пытаясь войти в мое устаревшее приложение, я получаю этот журнал ошибок:

[Пт Фев 07 18: 22: 10.272147 2020] [php7: warn] [pid 3610] [клиент 10.0.2.2:59628] PHP Предупреждение: ini_set (): сеанс активен. Вы не можете изменить настройки ini модуля сеанса в это время в /home/vagrant/swdev/lib/vendor/lexpress/symfony1/lib/user/sfBasicSecurityUser.class.php в строке 257, реферер: http://127.0.0.1 : 8080 / frontend_dev.php / registration /

[пт 07 фев 18: 22: 10.360800 2020] [php7: warn] [pid 3610] [клиент 10.0.2.2:59628] PHP Предупреждение: ini_set (): сеанс активен. Вы не можете изменить настройки ini модуля сеанса в это время в /home/vagrant/swdev/lib/vendor/lexpress/symfony1/lib/user/sfBasicSecurityUser.class.php в строке 257, реферер: http://127.0.0.1 : 8080 / frontend_dev.php / registration /

[пт 07 фев 18: 22: 10.826885 2020] [php7: warn] [pid 3521] [клиент 10.0.2.2:59629] PHP Предупреждение: ini_set (): сеанс активен. Вы не можете изменить настройки ini модуля сеанса в это время в /home/vagrant/swdev/lib/vendor/lexpress/symfony1/lib/user/sfBasicSecurityUser.class.php в строке 257, реферер: http://127.0.0.1 : 8080 / frontend_dev.php / registration /

[пт 07 фев 18: 22: 11.717016 2020] [php7: уведомление] [pid 3521] [клиент 10.0.2.2:59629] Кэш результатов драйвер не инициализирован., реферер: http://127.0.0.1: 8080 / frontend_dev.php / registration /

0 голосов
/ 07 февраля 2020

Проблема не в коде FOS, а в коде, который его вызывает. Вы можете видеть, что он объединяет массив FOS с вашим массивом $options. Пожалуйста, проверьте трассировку стека для вызова этого метода и посмотрите, откуда берется аргумент $options. Решение этой проблемы решит проблему с использованием слишком длинного идентификатора.

РЕДАКТИРОВАТЬ: Я провел некоторые проверки, используя PHP 7.2, который вы используете, и я предполагаю, что там должен быть какой-то PR, чтобы сделать код и изменить код до:

$options = array_merge([
    'name'            => 'symfony',
    /**
     * Cannot be set becasue is not an session option
     * @see: https://www.php.net/manual/en/session.configuration.php
     */
    //'session_id'              => null,
    /**
     * Cannot be set becasue of PERDIR
     * @see: https://www.php.net/manual/en/configuration.changes.modes.php
     */
    //'auto_start'              => '0',
    'cookie_lifetime' => $cookieDefaults['lifetime'],
    'cookie_path'     => $cookieDefaults['path'],
    'cookie_domain'   => $cookieDefaults['domain'],
    'cookie_secure'   => $cookieDefaults['secure'],
    'cookie_httponly' => isset($cookieDefaults['httponly']) ? $cookieDefaults['httponly'] : false,
    /**
     * Only allows specified string values, defaults to nocache, not null
     */
    'cache_limiter'   => 'nocache',
], $options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...