限制Session元数据写入
PHP session的默认行为是不管session数据是否被改变都会持久化session。在Symfony中,每次session被访问,可以用来确定Session的时效和闲置时间的元数据(Metadata)都会被记录(session被创建/最后被使用)。
如果由于性能原因你想限制Session持久化的频率,此功能可以调整元数据(Metadata)的更新的间隔,并减少Session持久化的频率,同时仍然保持相对准确的元数据。如果其他Session数据发生了变化,这个session将始终持久化。
您可以用设置framework.session.metadata_update_threshold
的值大于 0 秒的方法,来告诉 Symfony 不去更新元数据“session Last used”的时间,直到隔了“你设置的这段时间后”才会再次更新(译注:也就是说你设置framework.session.metadata_update_threshold
为120秒,你的session如何更新都会在每隔120秒后,元数据的“session Last used”才会更新一次)。
1 2 3 |
framework:
session:
metadata_update_threshold: 120 |
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="Http://symfony.com/schema/dic/services"
xmlns:framework="http://symfony.com/schema/dic/symfony"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/symfony http://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
<framework:config>
<framework:session metadata-update-threshold="120" />
</framework:config>
</container> |
1 2 3 4 5 |
$container->loadFromExtension('framework', array(
'session' => array(
'metadata_update_threshold' => 120,
),
)); |
PHP的默认行为是去保存session无论他是否改变。当使用framework.session.metadata_update_threshold
时,Symfony会将session处理器(被配置的framework.session.handler_id
)裹入(wrap)到WriteCheckSessionHandler中。这将防止任何没有被修改的Session写入。
请注意,如果session不是在每一个请求上都写,他可能比平时更早被垃圾回收。这意味着您的用户可能会比预期提前注销。