Skip to content

Commit 14a080f

Browse files
committed
feature #4907 Adjustments to PDO Session storage page (kbond)
This PR was merged into the 2.6 branch. Discussion ---------- Adjustments to PDO Session storage page | Q | A | ------------- | --- | Doc fix? | yes | New docs? | no | Applies to | 2.6+ | Fixed tickets | #4609 1. Adds a note about the issues with exceeding the max `BLOB` size for mysql - do the other DBMS's have this issue? 2. Remove `PDO` service from example and has `PdoSessionHandler` connect lazily to the db. 3. Make `session.handler.pdo` private Commits ------- e0996eb Add note about max blob size e5d7936 Change PdoSessionHandler to lazy connection
2 parents b1aadbf + e0996eb commit 14a080f

File tree

1 file changed

+42
-55
lines changed

1 file changed

+42
-55
lines changed

cookbook/configuration/pdo_session_storage.rst

+42-55
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,12 @@ configuration format of your choice):
3131
handler_id: session.handler.pdo
3232
3333
services:
34-
pdo:
35-
class: PDO
36-
arguments:
37-
# see below for how to use your existing DB config
38-
dsn: "mysql:dbname=mydatabase"
39-
user: myuser
40-
password: mypassword
41-
calls:
42-
- [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION
43-
4434
session.handler.pdo:
4535
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
46-
arguments: ["@pdo"]
36+
public: false
37+
arguments:
38+
- "mysql:dbname=mydatabase"
39+
- { db_username: myuser, db_password: mypassword }
4740
4841
.. code-block:: xml
4942
@@ -53,18 +46,12 @@ configuration format of your choice):
5346
</framework:config>
5447
5548
<services>
56-
<service id="pdo" class="PDO">
57-
<argument>mysql:dbname=mydatabase</argument>
58-
<argument>myuser</argument>
59-
<argument>mypassword</argument>
60-
<call method="setAttribute">
61-
<argument type="constant">PDO::ATTR_ERRMODE</argument>
62-
<argument type="constant">PDO::ERRMODE_EXCEPTION</argument>
63-
</call>
64-
</service>
65-
66-
<service id="session.handler.pdo" class="Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler">
67-
<argument type="service" id="pdo" />
49+
<service id="session.handler.pdo" class="Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler" public="false">
50+
<argument>mysql:dbname=mydatabase</agruement>
51+
<argument type="collection">
52+
<argument key="db_username">myuser</argument>
53+
<argument key="db_password">mypassword</argument>
54+
</argument>
6855
</service>
6956
</services>
7057
@@ -82,16 +69,9 @@ configuration format of your choice):
8269
),
8370
));
8471
85-
$pdoDefinition = new Definition('PDO', array(
86-
'mysql:dbname=mydatabase',
87-
'myuser',
88-
'mypassword',
89-
));
90-
$pdoDefinition->addMethodCall('setAttribute', array(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION));
91-
$container->setDefinition('pdo', $pdoDefinition);
92-
9372
$storageDefinition = new Definition('Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler', array(
94-
new Reference('pdo'),
73+
'mysql:dbname=mydatabase',
74+
array('db_username' => 'myuser', 'db_password' => 'mypassword')
9575
));
9676
$container->setDefinition('session.handler.pdo', $storageDefinition);
9777
@@ -111,19 +91,21 @@ a second array argument to ``PdoSessionHandler``:
11191
# ...
11292
session.handler.pdo:
11393
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
94+
public: false
11495
arguments:
115-
- "@pdo"
116-
- { 'db_table': 'sessions'}
96+
- "mysql:dbname=mydatabase"
97+
- { db_table: sessions, db_username: myuser, db_password: mypassword }
11798
11899
.. code-block:: xml
119100
120101
<!-- app/config/config.xml -->
121102
<services>
122-
<service id="session.handler.pdo"
123-
class="Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler">
124-
<argument type="service" id="pdo" />
103+
<service id="session.handler.pdo" class="Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler" public="false">
104+
<argument>mysql:dbname=mydatabase</agruement>
125105
<argument type="collection">
126106
<argument key="db_table">sessions</argument>
107+
<argument key="db_username">myuser</argument>
108+
<argument key="db_password">mypassword</argument>
127109
</argument>
128110
</service>
129111
</services>
@@ -135,13 +117,10 @@ a second array argument to ``PdoSessionHandler``:
135117
use Symfony\Component\DependencyInjection\Definition;
136118
// ...
137119
138-
$storageDefinition = new Definition(
139-
'Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler',
140-
array(
141-
new Reference('pdo'),
142-
array('db_table' => 'session')
143-
)
144-
);
120+
$storageDefinition = new Definition('Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler', array(
121+
'mysql:dbname=mydatabase',
122+
array('db_table' => 'sessions', 'db_username' => 'myuser', 'db_password' => 'mypassword')
123+
));
145124
$container->setDefinition('session.handler.pdo', $storageDefinition);
146125
147126
.. versionadded:: 2.6
@@ -177,27 +156,28 @@ of your project's data, you can use the connection settings from the
177156
.. code-block:: yaml
178157
179158
services:
180-
pdo:
181-
class: PDO
159+
session.handler.pdo:
160+
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
161+
public: false
182162
arguments:
183163
- "mysql:host=%database_host%;port=%database_port%;dbname=%database_name%"
184-
- "%database_user%"
185-
- "%database_password%"
164+
- { db_username: %database_user%, db_password: %database_password% }
186165
187166
.. code-block:: xml
188167
189-
<service id="pdo" class="PDO">
190-
<argument>mysql:host=%database_host%;port=%database_port%;dbname=%database_name%</argument>
191-
<argument>%database_user%</argument>
192-
<argument>%database_password%</argument>
168+
<service id="session.handler.pdo" class="Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler" public="false">
169+
<argument>mysql:host=%database_host%;port=%database_port%;dbname=%database_name%</agruement>
170+
<argument type="collection">
171+
<argument key="db_username">%database_user%</argument>
172+
<argument key="db_password">%database_password%</argument>
173+
</argument>
193174
</service>
194175
195176
.. code-block:: php
196177
197-
$pdoDefinition = new Definition('PDO', array(
178+
$storageDefinition = new Definition('Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler', array(
198179
'mysql:host=%database_host%;port=%database_port%;dbname=%database_name%',
199-
'%database_user%',
200-
'%database_password%',
180+
array('db_username' => '%database_user%', 'db_password' => '%database_password%')
201181
));
202182
203183
Example SQL Statements
@@ -236,6 +216,13 @@ following (MySQL):
236216
`sess_lifetime` MEDIUMINT NOT NULL
237217
) COLLATE utf8_bin, ENGINE = InnoDB;
238218
219+
.. note::
220+
221+
A ``BLOB`` column type can only store up to 64 kb. If the data stored in
222+
a user's session exceeds this, an exception may be thrown or their session
223+
will be silently reset. Consider using a ``MEDIUMBLOB`` if you need more
224+
space.
225+
239226
PostgreSQL
240227
~~~~~~~~~~
241228

0 commit comments

Comments
 (0)