限制Session元数据写入

3.4 版本
维护中的版本

PHP session的默认行为是,不管session数据是否被发生改变,都会对session持久化(译注:硬盘写入)。在Symfony中,每当session被访问,用来确定session周期和闲置时间的元数据(metadata)都会被记录下来(session的创建/最后被使用的时间)。

如果由于性能原因,你希望限制session持久化的频率,此一功能可以调整元数据更新的间隔,降低session持久化的频率,同时仍然保持相对准确的元数据。如果其他的session数据发生了改变,session将始终持久化。

你可以用一个大于零的秒数来设置 framework.session.metadata_update_threshold 的值,来告诉 Symfony 不要去更新元数据“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,
    ),
));

Note

PHP session的默认行为是,不管session数据是否被发生改变,都会存储session。当使用 framework.session.metadata_update_threshold 时,Symfony 会将 session handler(由 framework.session.handler_id 选项配置)打包到 WriteCheckSessionHandler 中。这可以防止任何未被修改的 session 被写入。

Caution

注意,如果session并非在每一次的请求中被写入,它可能比平时更早地被垃圾回收。这意味着你的用户可能会比预期提前注销。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)