创建数据表
DROP TABLE IF EXISTS `wdphp_session`; CREATE TABLE `wdphp_session` ( `session_id` char(40) NOT NULL COMMENT 'SESSION键', `data` text NOT NULL COMMENT 'SESSION值', `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'SESSION更新时间', PRIMARY KEY (`session_id`), UNIQUE KEY `session_id` (`session_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
配置文件config.php
'session' => [ 'id' => '', // SESSION_ID的提交变量,解决flash上传跨域 'var_session_id' => '', // SESSION 前缀 'prefix' => 'think', // 驱动方式 支持redis memcache memcached 'type' => '\driver\session\Db', // 最主要是这里!!! // 是否自动开启 SESSION 'auto_start' => true, // 下面四个可选,你要喜欢的话可以一块配了 'expire' => 0, // Session有效期 'table_name' => 'session', // 表名(不包含前缀) 'db_config' => '', //应用配置文件中配置的额外的数据库连接信息 ],可能需要说明的就是db_config项,这个就是用来切换数据库连接的,TP5手册里说得很清楚了,截个图吧 当你需要db_config1这个连接数据库的时候,你可以配置
'db_config' => 'db_config1'不配置的话,就是应用默认的数据库连接了
就这么简单
我这个驱动对数据的操作,完全是用了官方的数据库三大神器,采用PDO方式,当然也就包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持,虽然我这里用的是MySQL。
虽然将session入库,可以在一定程度上提高session的性能,特别是用memory引擎的时候,但是,session入库同样存在效率不高、占据数据库connection资源等问题,针对这种情况,可以使用memcached、redis等KV数据存储方案实现高并发、大流量的session存储。
也许这也tp官方为什么只出memcached、redis的session驱动,而不出数据库的session驱动的原因吧。