设置托管方式
在入口文件里面我可以看到下面的配置:
/**
* 设置session托管类型
* 1.setSessionHandle可以直接传入Soter_Session类对象
* 2.setSessionHandle也可以传入配置文件名称,配置文件里面要返回一个Soter_Session类对象。
*/
//->setSessionHandle('session')
默认情况下setSessionHandle被注释掉了,也就是采用php默认的session处理,如果要启用托管取消前面的注释即可,
然后传递我们的参数,参数可以是Soter_Session类对象,也可以传入配置文件名称,配置文件里面要返回一个Soter_Session类对象。
下面对每种托管方式进行说明:
1.memcache
memcache托管方式采用的是session.save_handler管理机制,需要php安装memcache拓展支持。
配置方式如下:
->setSessionHandle(new Soter_Session_Memcache(array('path' => 'tcp://127.0.0.1:11211')))
2.memcached
memcached托管方式采用的是session.save_handler管理机制,需要php安装memcached拓展支持。
配置方式如下:
->setSessionHandle(new Soter_Session_Memcached(array('path' => '127.0.0.1:11211')))
3.redis
redis托管方式采用的是session.save_handler管理机制,需要php安装redis拓展支持。
配置方式如下:
->setSessionHandle(new Soter_Session_Redis(array('path' => 'tcp://127.0.0.1:6379')))
3.1、还可以使用多个redis服务器并且制定权重比如:
tcp://host1:6379?weight=1, tcp://host2:6379?weight=2
3.2、还可以通过在tcp://127.0.0.1:6379后面加参数,定义更多的功能,
可用的参数及含义如下:
格式:tcp://127.0.0.1:6379?weight=值1&参数2=值2&参数3=值3
参数列表:
weight(整数): 权重,当指定了多个服务器的时候.比如:tcp://host1:6379?weight=1, tcp://host2:6379?weight=2
timeout (浮点数): 单位秒. 默认86400秒.
persistent (整数, 1 或 0): defines if a persistent connection should be used. (experimental setting)
prefix (字符串, 默认"PHPREDIS_SESSION:"):sesson id 前缀.
auth (字符串, 默认:空):认证密码,避免特殊字符影响可以需要使用urlencode()处理一下.
database (整数): 使用数据库的序号.
4.mongodb
mongodb托管方式采用的是php自定义注册session处理实现的,Soter_Session_Mongodb类实现了这个功能,
使用的时候,我们需要通过配置告诉它mongodb的连接信息。
配置方式如下:
->setSessionHandle(new Soter_Session_Mongodb(
array(
'host' => '127.0.0.1', //mongodb主机地址
'port' => 27017, //端口
'user' => 'root',
'password' => '',
'database' => 'local', // MongoDB 数据库名称
'collection' => 'sessions', // MongoDB collection名称
'persistent' => false, // 是否持久连接
'persistentId' => 'SoterMongoSession', // 持久连接id
// 是否支持 replicaSet
'replicaSet' => false,
)
))
5.mysql
mysql托管方式采用的是php自定义注册session处理实现的,Soter_Session_Mysql类实现了这个功能,
使用的时候,我们需要通过配置告诉它mysql的连接信息。
配置方式如下:
->setSessionHandle(new Soter_Session_Mysql(
array(
//如果使用数据库配置里面的组信息,这里可以设置group组名称,没有就留空
//设置group组名称后,下面连接的配置不再起作用,group优先级大于下面的连接信息
'group' => '',
//表全名,不包含前缀
'table' => 'session_handler_table',
//表前缀,如果有使用数据库配置组里面的信息
//这里可以设置相同的数据库配置组里面的前缀才能正常工作
'table_prefix' => '',
//连接信息
'hostname' => '127.0.0.1',
'port' => 3306,
'username' => 'root',
'password' => 'admin',
'database' => 'test',
)
))
存储session的表结构如下:
CREATE TABLE `session_handler_table` (
`id` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`timestamp` int(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`,`timestamp`),
KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;