如何使用PdoSessionHandler存储会话在数据库中

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何使用PdoSessionHandler存储会话在数据库中

默认的Symfony会话ob娱乐下载存储将会话信息写入文件。大多数中型到大型网站使用数据库来存储会话值,而不是文件,因为数据库更容易在多个web服务器环境中使用和扩展。

ob娱乐下载Symfony有一个内置的数据库会话存储解决方案,称为PdoSessionHandler.要使用它,你只需要改变主配置文件中的一些参数:

2.1

在Syob娱乐下载mfony 2.1中,类和命名空间进行了轻微修改。类中的会话存储类会话\存储名称空间:ob娱乐下载\组件\ HttpFoundation\会话\存储.另外,请注意在Symfony 2.1中ob娱乐下载应该进行配置handler_idstorage_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”varchar255“session_value”文本“session_time”int11、主关键“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模式当这样的错误发生时得到注意。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。