如何使用PdoSessionHandler在数据库中存储会话吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
如何使用PdoSessionHandler在数据库中存储会话吗
默认的Symfony会话ob娱乐下载存储将会话信息写到文件(年代)。大多数大中型网站使用一个数据库来存储会话值而不是文件,因为数据库是multi-webserver环境中更容易使用和规模。
ob娱乐下载Symfony有一个内置的数据库会话存储解决方案PdoSessionHandler。使用它,你只需要改变一些参数config.yml
(或您选择的配置格式):
1 2 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 %”]
1 2 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
< !- - - - - -- - - - - -app/config/config.xml -->< /span><框架:配置><框架:会话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< /论点><论点>我的密码< /论点><调用方法=“setAttribute”><论点类型=“不变”>PDO: ATTR_ERRMODE< /论点><论点类型=“不变”>PDO: ERRMODE_EXCEPTION< /论点>< /调用>< /服务><服务id=“session.handler.pdo”类=“ob娱乐下载Symfony \ HttpFoundation \会议\ \组件存储\处理器\ PdoSessionHandler”><论点类型=“服务”id=“pdo”/ ><论点>% pdo.db_options %< /论点>< /服务>< /服务>
1 2 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 32
/ / 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”,“我的密码”));美元pdoDefinition- >addMethodCall (“setAttribute”,数组(\ PDO::ATTR_ERRMODE, \ PDO::ERRMODE_EXCEPTION));美元容器- >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
:值列在您的会话表的名称(文本或CLOB)db_time_col
:时间列在您的会话表的名称(整数)
分享您的数据库连接信息
用给定的配置、数据库连接设置仅为会话存储连接定义。这是好的当你使用一个单独的数据库会话数据。
但是如果你想将会话数据存储在同一个数据库作为你其他的项目的数据,您可以使用的连接设置parameters.yml
文件通过引用数据库相关参数定义:
1 2 3 4 5 6 7
服务: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
该软件的声明看起来像下面的:
1 2 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(初级)
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。