-
Notifications
You must be signed in to change notification settings - Fork 430
Description
After upgrading from FrankenPHP 1.11.1 to 1.11.2, native file-based sessions stopped working in worker mode with Symfony 8.0.5. Session files are created on disk
but remain 0 bytes — the session data is never written. This causes users to be logged out on every page load.
Rolling back to FrankenPHP 1.11.1 immediately fixes the issue.
Environment
- FrankenPHP 1.11.2 (Docker image dunglas/frankenphp:1.11-php8.5)
- PHP 8.5.2
- Symfony 8.0.5 (symfony/http-kernel v8.0.5, symfony/http-foundation v8.0.5)
- Worker mode with 8 workers, MAX_REQUESTS=100
- Native file session handler (session.save_handler = files)
- Linux (Debian-based Docker container)
Steps to reproduce
- Use FrankenPHP 1.11.2 in worker mode with Symfony 8.0.5
- Configure native file sessions (handler_id: null, save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%')
- Log in or trigger any action that writes to the session
- Observe that session files in var/sessions/prod/ are created but remain 0 bytes
- The user is not authenticated on the next request
Problem behavior
Session files are created (proving session_start() is called) but remain 0 bytes (session data is never persisted). Users are logged out on every page
navigation.
Investigation
- Raw PHP sessions work fine: calling session_start() + $_SESSION['test'] = 'value' + session_write_close() directly writes data to disk correctly
- The issue is specific to Symfony's session lifecycle within the FrankenPHP worker loop
- All Symfony code, configuration, and compiled container config is identical between the working (1.11.1) and broken (1.11.2) images — only the FrankenPHP
version differs - Pinning back to dunglas/frankenphp:1.11.1-php8.5 immediately resolves the issue
Suspected cause
PR #2139 (merged in 1.11.2) resets $_SESSION and INI settings between worker requests at the C level. Symfony 8.0.4 (PR symfony/symfony#62848) also changed the
timing of service resets in Kernel::boot(), including AbstractSessionListener::reset() which calls session_abort(), session_unset(), and session_id('').
The interaction between these two reset mechanisms may cause session data to be discarded before Symfony's session_write_close() flushes it to disk.
Specifically, if FrankenPHP's $_SESSION snapshot/restore interferes with the PHP session module's internal reference to $_SESSION, the data written by
session_write_close() could be empty even though the application populated $_SESSION during the request.
Build Type
Docker (Debian Trixie)
Worker Mode
Yes
Operating System
GNU/Linux
CPU Architecture
x86_64
PHP configuration
phpinfo()
PHP Version => 8.5.2
System => Linux x86_64
Build Date => Feb 3 2026 02:28:01
Build System => Linux - Docker
Build Provider => https://github.com/docker-library/php
Configure Command => './configure' '--build=x86_64-linux-gnu' '--sysconfdir=/usr/local/etc' '--with-config-file-path=/usr/local/etc/php' '--with-config-file-scan-dir=/usr/local/etc/php/conf.d' '--enable-option-checking=fatal' '--with-mhash' '--with-pic' '--enable-mbstring' '--enable-mysqlnd' '--with-password-argon2' '--with-sodium=shared' '--with-pdo-sqlite=/usr' '--with-sqlite3=/usr' '--with-curl' '--with-iconv' '--with-openssl' '--with-readline' '--with-zlib' '--enable-phpdbg' '--enable-phpdbg-readline' '--with-pear' '--with-libdir=lib/x86_64-linux-gnu' '--enable-embed' '--enable-zts' '--disable-zend-signals' 'build_alias=x86_64-linux-gnu' 'PHP_UNAME=Linux - Docker' 'PHP_BUILD_PROVIDER=https://github.com/docker-library/php'
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/conf.d
Additional .ini files parsed => /usr/local/etc/php/conf.d/app.prod.ini,
/usr/local/etc/php/conf.d/docker-php-ext-apcu.ini,
/usr/local/etc/php/conf.d/docker-php-ext-calendar.ini,
/usr/local/etc/php/conf.d/docker-php-ext-exif.ini,
/usr/local/etc/php/conf.d/docker-php-ext-gd.ini,
/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-redis.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xsl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini
PHP API => 20250925
PHP Extension => 20250925
Zend Extension => 420250925
Zend Extension Build => API420250925,TS
PHP Extension Build => API20250925,TS
PHP Integer Size => 64 bits
Debug Build => no
Thread Safety => enabled
Thread API => POSIX Threads
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
Zend Max Execution Timers => enabled
IPv6 Support => enabled
DTrace Support => disabled
Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3
Registered Stream Filters => zlib.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, convert.*, consumed, dechunk
This program makes use of the Zend Scripting Language Engine:
Zend Engine v4.5.2, Copyright (c) Zend Technologies
with Zend OPcache v8.5.2, Copyright (c), by Zend Technologies
_______________________________________________________________________
Configuration
apcu
APCu Support => Enabled
Version => 5.1.28
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask =>
Serialization Support => php
Directive => Local Value => Master Value
apc.coredump_unmap => Off => Off
apc.enable_cli => On => On
apc.enabled => On => On
apc.entries_hint => 0 => 0
apc.gc_ttl => 3600 => 3600
apc.mmap_file_mask => no value => no value
apc.mmap_hugepage_size => 0 => 0
apc.preload_path => no value => no value
apc.serializer => php => php
apc.shm_size => 512M => 512M
apc.slam_defense => Off => Off
apc.smart => 0 => 0
apc.ttl => 0 => 0
apc.use_request_time => Off => Off
calendar
Calendar support => enabled
Core
PHP Version => 8.5.2
Directive => Local Value => Master Value
allow_url_fopen => On => On
allow_url_include => Off => Off
auto_globals_jit => On => On
default_charset => UTF-8 => UTF-8
display_errors => Off => Off
display_startup_errors => Off => Off
enable_dl => Off => Off
error_log => /dev/stderr => /dev/stderr
error_reporting => 22527 => 22527
expose_php => Off => Off
fatal_error_backtraces => On => On
file_uploads => On => On
hard_timeout => 2 => 2
html_errors => Off => Off
implicit_flush => On => On
log_errors => On => On
max_execution_time => 0 => 0
max_file_uploads => 20 => 20
max_input_nesting_level => 128 => 128
max_input_time => -1 => -1
max_input_vars => 5000 => 5000
max_memory_limit => -1 => -1
memory_limit => 512M => 512M
output_buffering => 0 => 0
post_max_size => 20M => 20M
realpath_cache_size => 4096K => 4096K
realpath_cache_ttl => 600 => 600
register_argc_argv => Off => Off
request_order => GP => GP
short_open_tag => Off => Off
upload_max_filesize => 20M => 20M
variables_order => GPCS => GPCS
zend.assertions => -1 => -1
zend.enable_gc => On => On
zend.exception_ignore_args => On => On
zend.exception_string_param_max_len => 0 => 0
ctype
ctype functions => enabled
curl
cURL support => enabled
cURL Information => 8.14.1
date
date/time support => enabled
timelib version => 2022.14
"Olson" Timezone Database Version => 2025.2
Timezone Database => internal
Default timezone => Europe/Paris
dom
DOM/XML => enabled
DOM/XML API Version => 20031129
libxml Version => 2.9.14
exif
EXIF Support => enabled
Supported EXIF Version => 0220
fileinfo
fileinfo support => enabled
libmagic => 5.46
filter
Input Validation and Filtering => enabled
gd
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
FreeType Support => enabled
FreeType Version => 2.13.3
JPEG Support => enabled
PNG Support => enabled
libPNG Version => 1.6.48
WebP Support => enabled
AVIF Support => enabled
hash
hash support => enabled
iconv
iconv support => enabled
iconv implementation => glibc
iconv library version => 2.41
imagick
imagick module => enabled
imagick module version => 3.8.1
Imagick compiled with ImageMagick version => ImageMagick 7.1.1-43 Q16 x86_64
intl
Internationalization support => enabled
ICU version => 76.1
ICU Data version => 76.1
json
json support => enabled
lexbor
Lexbor support => active
Lexbor version => 2.5.0
libxml
libXML support => active
libXML Compiled Version => 2.9.14
mbstring
Multibyte Support => enabled
Multibyte string engine => libmbfl
libmbfl version => 1.3.2
Multibyte (japanese) regex support => enabled
Multibyte regex (oniguruma) version => 6.9.9
mysqlnd
mysqlnd => enabled
Version => mysqlnd 8.5.2
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 3.5.4 30 Sep 2025
pcre
PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 10.44 2024-06-07
PCRE JIT Support => enabled
PDO
PDO support => enabled
PDO drivers => sqlite, mysql
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 8.5.2
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.46.1
Phar
Phar: PHP Archive support => enabled
posix
POSIX support => enabled
random
Version => 8.5.2
readline
Readline Support => enabled
Readline library => 8.2
redis
Redis Support => enabled
Redis Version => 6.3.0
Redis Sentinel Version => 1.0
Available serializers => php, json
Available compression => lzf, zstd, lz4
session
Session Support => enabled
Registered save handlers => files user redis rediscluster
Registered serializer handlers => php_serialize php php_binary
Directive => Local Value => Master Value
session.auto_start => Off => Off
session.cache_expire => 180 => 180
session.cache_limiter => nocache => nocache
session.cookie_domain => no value => no value
session.cookie_httponly => On => On
session.cookie_lifetime => 0 => 0
session.cookie_partitioned => Off => Off
session.cookie_path => / => /
session.cookie_samesite => no value => no value
session.cookie_secure => On => On
session.gc_divisor => 1000 => 1000
session.gc_maxlifetime => 1440 => 1440
session.gc_probability => 1 => 1
session.lazy_write => On => On
session.name => PHPSESSID => PHPSESSID
session.save_handler => files => files
session.save_path => no value => no value
session.serialize_handler => php => php
session.sid_bits_per_character => 4 => 4
session.sid_length => 32 => 32
session.upload_progress.cleanup => On => On
session.upload_progress.enabled => On => On
session.use_cookies => On => On
session.use_only_cookies => On => On
session.use_strict_mode => On => On
session.use_trans_sid => Off => Off
SimpleXML
SimpleXML support => enabled
sodium
sodium support => enabled
libsodium headers version => 1.0.18
libsodium library version => 1.0.18
SPL
SPL support => enabled
sqlite3
SQLite3 support => enabled
SQLite Library => 3.46.1
tokenizer
Tokenizer Support => enabled
uri
URI support => active
uriparser bundled version => 1.0.0
xml
XML Support => active
libxml2 Version => 2.9.14
xmlreader
XMLReader => enabled
xmlwriter
XMLWriter => enabled
xsl
XSL => enabled
libxslt Version => 1.1.35
Zend OPcache
Opcode Caching => Up and Running
Optimization => Enabled
SHM Cache => Enabled
File Cache => Disabled
JIT => Disabled
Startup => OK
Shared memory model => mmap
Directive => Local Value => Master Value
opcache.enable => On => On
opcache.enable_cli => On => On
opcache.enable_file_override => On => On
opcache.interned_strings_buffer => 16 => 16
opcache.jit => disable => disable
opcache.jit_buffer_size => 64M => 64M
opcache.max_accelerated_files => 20000 => 20000
opcache.memory_consumption => 256 => 256
opcache.preload => /app/config/preload.php => /app/config/preload.php
opcache.preload_user => www-data => www-data
opcache.revalidate_freq => 0 => 0
opcache.validate_timestamps => Off => Off
zip
Zip => enabled
Zip version => 1.22.7
Libzip version => 1.11.3
zlib
ZLib Support => enabled
Compiled Version => 1.3.1
Linked Version => 1.3.1