From 37284b091f9efb54b42f2d715260bd704b51b389 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 13 Jul 2015 09:48:19 +0200 Subject: [PATCH 1/2] Added a note about session data size in PdoSessionHandler --- .../configuration/pdo_session_storage.rst | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/cookbook/configuration/pdo_session_storage.rst b/cookbook/configuration/pdo_session_storage.rst index 03445fadbf1..8fdfe9ce359 100644 --- a/cookbook/configuration/pdo_session_storage.rst +++ b/cookbook/configuration/pdo_session_storage.rst @@ -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`. @@ -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` ( @@ -193,8 +196,6 @@ following (MySQL): PostgreSQL ~~~~~~~~~~ -For PostgreSQL, the statement should look like this: - .. code-block:: sql CREATE TABLE session ( @@ -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]( @@ -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 From 964dcafc36dee5aa2937de7a792ff35c75fb1bd2 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Tue, 14 Jul 2015 22:45:33 +0200 Subject: [PATCH 2/2] Fixed some minor errors --- cookbook/configuration/pdo_session_storage.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cookbook/configuration/pdo_session_storage.rst b/cookbook/configuration/pdo_session_storage.rst index 8fdfe9ce359..f36a31803ac 100644 --- a/cookbook/configuration/pdo_session_storage.rst +++ b/cookbook/configuration/pdo_session_storage.rst @@ -172,7 +172,7 @@ 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 ---------------------------------------- @@ -236,4 +236,4 @@ Microsoft SQL Server 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 +.. _`strict SQL mode`: https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html