Skip to content

Added a note about session data size in PdoSessionHandler #5515

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 22 additions & 10 deletions cookbook/configuration/pdo_session_storage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ How to Use PdoSessionHandler to Store Sessions in the Database
The default Symfony session storage writes the session information to files.
Most medium to large websites use a database to store the session values
instead of files, because databases are easier to use and scale in a
multi webserver environment.
multiple web server environment.

Symfony has a built-in solution for database session storage called
:class:`Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\PdoSessionHandler`.
Expand Down Expand Up @@ -172,15 +172,18 @@ of your project's data, you can use the connection settings from the
'%database_password%',
));

Example SQL Statements
----------------------
.. example-sql-statements::

Preparing the Database to Store Sessions
----------------------------------------

Before storing sessions in the database, you must create the table that stores
the information. The following sections contain some examples of the SQL statements
you may use for your specific database engine.

MySQL
~~~~~

The SQL statement for creating the needed database table might look like the
following (MySQL):

.. code-block:: sql

CREATE TABLE `session` (
Expand All @@ -193,8 +196,6 @@ following (MySQL):
PostgreSQL
~~~~~~~~~~

For PostgreSQL, the statement should look like this:

.. code-block:: sql

CREATE TABLE session (
Expand All @@ -207,8 +208,6 @@ For PostgreSQL, the statement should look like this:
Microsoft SQL Server
~~~~~~~~~~~~~~~~~~~~

For MSSQL, the statement might look like the following:

.. code-block:: sql

CREATE TABLE [dbo].[session](
Expand All @@ -225,3 +224,16 @@ For MSSQL, the statement might look like the following:
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

.. note::

If the session data doesn't fit in the data column, it might get truncated
by the database engine. To make matters worse, when the session data gets
corrupted, PHP ignores the data without giving a warning.

If the application stores large amounts of session data, this problem can
be solved by increasing the column size (use ``BLOB`` or even ``MEDIUMBLOB``).
When using MySQL as the database engine, you can also enable the `strict SQL mode`_
to get noticed when such an error happens.

.. _`strict SQL mode`: https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html