创建数据表
DROP TABLE IF EXISTS `session`;
CREATE TABLE `session` (
`session_id` char(40) NOT NULL COMMENT 'SESSION键',
`data` varchar(255) 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=MEMORY 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有效期
'prefix' => 'think', // Session前缀
'table_name' => 'session', // 表名(不包含前缀)
'db_config' => '', //应用配置文件中配置的额外的数据库连接信息
],
可能需要说明的就是db_config项,这个就是用来切换数据库连接的,TP5手册里说得很清楚了,截个图吧
当你需要db_config1这个连接数据库的时候,你可以配置
'db_config' => 'db_config1'
不配置的话,就是应用默认的数据库连接了就这么简单
我这个驱动对数据的操作,完全是用了官方的数据库三大神器,采用PDO方式,当然也就包含了Mysql、SqlServer、PgSQL、Sqlite等数据库的支持,虽然我这里用的是MySQL。
MySQL采用的是MEMORY引擎,也就是内存表,所有数据存储在内存,操作速度快,对于session这种形式的数据正好适用。当然啦,重启MySQL,所有session荡然无存,话说回来,你都重启数据库了,还在乎session?
虽然将session入库,可以在一定程度上提高session的性能,特别是用memory引擎的时候,但是,session入库同样存在效率不高、占据数据库connection资源等问题,针对这种情况,可以使用memcached、redis等KV数据存储方案实现高并发、大流量的session存储。
也许这也tp官方为什么只出memcached、redis的session驱动,而不出数据库的session驱动的原因吧。
还有什么问题或者Bug请及时反馈!!!