如何使用PdoSessionHandler存储会话在数据库中
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用PdoSessionHandler存储会话在数据库中
Symfony2的默认会话存储将会话信息写入文件。ob娱乐下载大多数中型到大型网站使用数据库来存储会话值,而不是文件,因为数据库更容易在多服务器环境中使用和扩展。
ob娱乐下载Symfony2有一个内置的数据库会话存储解决方案,称为PdoSessionHandler.要使用它,您只需要更改一些参数config.yml
(或您选择的配置格式):
2.1
在Syob娱乐下载mfony2.1中,类和命名空间进行了轻微修改。现在可以了
在“session \ storage”命名空间中找到会话存储类:ob娱乐下载
.还要注意,在Symfony2.1中应ob娱乐下载该进行配置handler_id
不storage_id
比如Symfonob娱乐下载y2.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
# 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密码:我的密码session.handler.pdo:类:ob娱乐下载Symfony \组件\ HttpFoundation \会议\ \ PdoSessionHandler存储\处理程序参数:[" @pdo ",“% pdo.db_options %”]
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.xml --><框架:配置><框架:会话handler-id=“session.handler.pdo”cookie-lifetime=“3600”自动启动=“真正的”/>框架:配置><参数><参数关键=“pdo.db_options”类型=“收集”><参数关键=“db_table”>会话参数><参数关键=“db_id_col”>session_id参数><参数关键=“db_data_col”>session_value参数><参数关键=“db_time_col”>session_time参数>参数>参数><服务><服务id=“pdo”类=“PDO”><论点>mysql: dbname = mydatabase论点><论点>myuser论点><论点>我的密码论点>服务><服务id=“session.handler.pdo”类=“ob娱乐下载Symfony \ HttpFoundation \会议\ \组件存储\处理器\ PdoSessionHandler”><论点类型=“服务”id=“pdo”/><论点>% pdo.db_options %论点>服务>服务>
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 27 28 29 30 31
/ / app / config / config . php使用ob娱乐下载\组件\DependencyInjection\定义;使用ob娱乐下载\组件\DependencyInjection\参考;$容器->loadFromExtension (“框架”,数组(…“会话”= >数组(/ /…“handler_id”= >“session.handler.pdo”,),));$容器->setParameter (“pdo.db_options”,数组(“db_table”= >“会话”,“db_id_col”= >“session_id”,“db_data_col”= >“session_value”,“db_time_col”= >“session_time”));$pdoDefinition=新定义(PDO的,数组(“mysql: dbname = mydatabase ',“myuser”,“我的密码”));$容器->setDefinition (pdo的,$pdoDefinition);$storageDefinition=新定义(“ob娱乐下载Symfony \组件存储\ HttpFoundation \会议\ \处理程序\ PdoSessionHandler ',数组(新引用(pdo的),“% pdo.db_options %”));$容器->setDefinition (“session.handler.pdo”,$storageDefinition);
db_table
:数据库中会话表的名称db_id_col
会话表中id列的名称(VARCHAR(255)或更大)db_data_col
:会话表中值列的名称(TEXT或CLOB)db_time_col
:会话表中时间列的名称(INTEGER)
共享数据库连接信息
对于给定的配置,数据库连接设置仅为会话存储连接定义。当您为会话数据使用单独的数据库时,这是可以的。
但是如果你想将会话数据存储在与项目其他数据相同的数据库中,你可以通过引用那里定义的数据库相关参数来使用parameter.ini中的连接设置:
- YAML
- XML
- PHP
1 2 3 4 5 6
pdo:类:PDO参数:-“mysql:主机= % database_host %;端口= % database_port %; dbname = % database_name % "-“% database_user %”-“% database_password %”
1 2 3 4 5
<服务id=“pdo”类=“PDO”><论点>mysql:主机= % database_host %;端口= % database_port %; dbname = % database_name %论点><论点>% database_user %论点><论点>% database_password %论点>服务>
1 2 3 4 5
$pdoDefinition=新定义(PDO的,数组(“mysql:主机= % database_host %;端口= % database_port %; dbname = % database_name % ',“% database_user %”,“% database_password %”));
示例SQL语句
MySQL
用于创建所需数据库表的SQL语句可能如下所示(MySQL):
1 2 3 4 5 6
创建表格“会话”(“session_id”varchar(255)不零,“session_value”文本不零,“session_time”int(11)不零、主关键(“session_id”) )引擎=InnoDB默认的字符集= use utf8;
PostgreSQL
对于PostgreSQL,语句应该是这样的:
1 2 3 4 5 6
创建表格会话(session_id字符不同(255)不零, session_value文本不零, session_time整数不零,约束session_pkey主要关键(session_id));
Microsoft SQL Server
对于MSSQL,语句可能如下所示:
1
创建表格[dbo]。会话) (
[session_id] [nvarchar](255) NOT NULL, [session_value] [ntext] NOT NULL, [session_time] [int] NOT NULL,主键集群([session_id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]