Я пытаюсь развернуть устаревший проект 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