如何使用PdoSessionHandler存储会话在数据库中
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用PdoSessionHandler存储会话在数据库中
默认的Symfony会话ob娱乐下载存储将会话信息写入文件。大多数中型到大型网站使用数据库来存储会话值,而不是文件,因为数据库更容易在多个web服务器环境中使用和扩展。
ob娱乐下载Symfony有一个内置的数据库会话存储解决方案,称为PdoSessionHandler.要使用它,你只需要改变主配置文件中的一些参数:
2.1
在Syob娱乐下载mfony 2.1中,类和命名空间进行了轻微修改。类中的会话存储类会话\存储
名称空间:ob娱乐下载
.另外,请注意在Symfony 2.1中ob娱乐下载应该进行配置handler_id
不storage_id
比如Symfonob娱乐下载y 2.0。下面,你会注意到% session.storage.options %
不再使用。
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# app / config / config.yml框架:会话:#……handler_id:session.handler.pdo参数:pdo.db_options:db_table:会话db_id_col:session_iddb_data_col:session_valuedb_time_col:session_time服务:pdo:类:PDO参数:dsn:“mysql: dbname = mydatabase”用户:myuser密码:我的密码电话:-[setAttribute,[3,2]]# \ pdo:: attr_errmode, \ pdo:: errmode_exceptionsession.handler.pdo:类:ob娱乐下载Symfony \组件\ HttpFoundation \会议\ \ PdoSessionHandler存储\处理程序参数:[' @pdo ',“% pdo.db_options %”]
这些是你必须配置的参数:
-
db_table
- 数据库中会话表的名称。
-
db_id_col
-
会话表中id列的名称(
VARCHAR (255)
或更大)。 -
db_data_col
-
会话表中值列的名称(
文本
或CLOB
). -
db_time_col
: -
会话表中的时间列名称(
整数
).
共享数据库连接信息
对于给定的配置,数据库连接设置仅为会话存储连接定义。当您为会话数据使用单独的数据库时,这是可以的。
但是,如果希望将会话数据存储在与项目其他数据相同的数据库中,则可以使用parameters.yml
文件中定义的数据库相关参数:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
服务:pdo:类:PDO参数:-“mysql:主机= % database_host %;端口= % database_port %; dbname = % database_name % '-“% database_user %”-“% database_password %”
准备数据库存储会话
在数据库中存储会话之前,必须创建存储信息的表。以下部分包含一些SQL语句示例,您可以在特定的数据库引擎中使用这些语句。
MySQL
1 2 3 4 5 6
创建表格“会话”(“session_id”varchar(255)不零,“session_value”文本不零,“session_time”int(11)不零、主关键(“session_id”))引擎=InnoDB默认的字符集= use utf8;
PostgreSQL
1 2 3 4 5 6
创建表格会话(session_id字符不同(255)不零, session_value文本不零, session_time整数不零,约束session_pkey主要关键(session_id));
Microsoft SQL Server
12 3 4 5 6 7 8 9 10 11 12 13 14
创建表格[dbo]。会话[session_id] [nvarchar) (255)不零, [session_value] [ntext]不零, [session_time] [int]不零、主关键集群((session_id)ASC)与(pad_index =从, statistics_norecompute =从, ignore_dup_key =从, allow_row_locks =在, allow_page_locks =在)在[主要])在textimage_on [primary]
谨慎
如果会话数据不适合数据列,它可能会被数据库引擎截断。更糟糕的是,当会话数据损坏时,PHP忽略数据而不给出警告。
如果应用程序存储大量会话数据,则可以通过增加列大小(使用团
甚至MEDIUMBLOB
).当使用MySQL作为数据库引擎时,还可以启用严格SQL模式当这样的错误发生时得到注意。