Feature: #70316 - Introduce Session Storage Framework

See forge#70316

Description

A new session storage framework has been introduced. The goal of this framework is to create interoperability between different session storages (called "backends") like database, file storage, Redis, etc.

Impact

An integrator may configure session backends based on TYPO3_MODE, which is either BE or FE.

The following session backends are available by default:

  • \TYPO3\CMS\Core\Session\Backend\DatabaseSessionBackend

  • \TYPO3\CMS\Core\Session\Backend\RedisSessionBackend

The default session backend for BE and FE is DatabaseSessionBackend with table set to fe_sessions and be_sessions respectively.

The configuration of the backend for each TYPO3_MODE is stored within SYS/session:

'SYS' => [
    'session' => [
        'BE' => [
            'backend' => \TYPO3\CMS\Core\Session\Backend\RedisSessionBackend::class,
            'options' => [
                'hostname' => 'localhost',
                'database' => 2
            ]
        ],
    ],
],

The DatabaseSessionBackend requires a table as option. If the backend is used to holds non-authenticated sessions (default for FE), the has_anonymous option must be set to true.

The RedisSessionBackend requires a running PHP redis module (PHP extension "redis") and a running redis service. By default, a connection will be made to hostname 127.0.0.1 and port 6379. You may also specify a database number which to store the sessions in (default database is 0) and a password for the connection.

A developer may implement a custom session backend. To achieve this, the interface \TYPO3\CMS\Core\Session\Backend\SessionBackendInterface has to be implemented.