Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github

Configurando o Diretório onde os Arquivos da Sessão são Salvos

Por padrão, a Edição Standard do Symfony usa os valores globais do php.ini para session.save_handler e session.save_path para determinar onde armazenar os dados da sessão. Isso é devido a seguinte configuração:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        session:
            # handler_id set to null will use default session handler from php.ini
            handler_id: ~
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        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>
            <!-- handler-id set to null will use default session handler from php.ini -->
            <framework:session handler-id="null" />
        </framework:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        'session' => array(
            // handler_id set to null will use default session handler from php.ini
            'handler_id' => null,
        ),
    ));
    

Com essa configuração, alterar onde os metadados da sessão são armazenados é inteiramente através da configuração do seu php.ini.

No entanto, se você tem a seguinte configuração, o Symfony irá armazenar os dados da sessão em arquivos no diretório cache %kernel.cache_dir%/sessions. Isso significa que quando você limpar o cache, todas as sessões atuais também serão excluídas:

  • YAML
    1
    2
    3
    # app/config/config.yml
    framework:
        session: ~
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        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 />
        </framework:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        'session' => array(),
    ));
    

Usar um diretório diferente para salvar os dados da sessão é um método para garantir que suas sessões atuais não são perdidas quando você limpar o cache do Symfony.

Tip

Usar um manipulador para salvar sessão diferente é um excelente (contudo mais complexo) método de gerenciamento de sessão disponível com o Symfony. Veja /components/http_foundation/session_configuration para uma discussão sobre os manipuladores para salvar sessão. Há também um artigo no cookbook sobre o armazenamento de sessões no banco de dados.

Para alterar o diretório no qual o Symfony salva os dados da sessão, você só precisa alterar a configuração do framework. Neste exemplo, você irá alterar o diretório da sessão para app/sessions:

  • YAML
    1
    2
    3
    4
    5
    # app/config/config.yml
    framework:
        session:
            handler_id: session.handler.native_file
            save_path: "%kernel.root_dir%/sessions"
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <!-- app/config/config.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:framework="http://symfony.com/schema/dic/symfony"
        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 handler-id="session.handler.native_file"
                save-path="%kernel.root_dir%/sessions"
            />
        </framework:config>
    </container>
    
  • PHP
    1
    2
    3
    4
    5
    6
    7
    // app/config/config.php
    $container->loadFromExtension('framework', array(
        'session' => array(
            'handler_id' => 'session.handler.native_file',
            'save_path'  => '%kernel.root_dir%/sessions',
        ),
    ));