Sessions

Symfony provides a session object and several utilities that you can use to store information about the user between requests.

symfony はセッション オブジェクトといくつかのユーティリティを提供しており、リクエスト間でユーザーに関する情報を保存するために使用できます。

Configuration

Sessions are provided by the HttpFoundation component, which is included in all Symfony applications, no matter how you installed it. Before using the sessions, check their default configuration:

セッションは、インストール方法に関係なく、すべての Symfony アプリケーションに含まれている HttpFoundation コンポーネントによって提供されます。セッションを使用する前に、デフォルト設定を確認してください。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
# config/packages/framework.yaml
framework:
    # Enables session support. Note that the session will ONLY be started if you read or write from it.
    # Remove or comment this section to explicitly disable session support.
    session:
        # ID of the service used for session storage
        # NULL means that Symfony uses PHP default session mechanism
        handler_id: null
        # improves the security of the cookies used for sessions
        cookie_secure: auto
        cookie_samesite: lax
        storage_factory_id: session.storage.factory.native

Setting the handler_id config option to null means that Symfony will use the native PHP session mechanism. The session metadata files will be stored outside of the Symfony application, in a directory controlled by PHP. Although this usually simplifies things, some session expiration related options may not work as expected if other applications that write to the same directory have short max lifetime settings.

handler_id 設定オプションを null に設定することは、Symfony がネイティブ PHP セッションメカニズムを使用することを意味します。セッション メタデータ ファイルは、Symfony アプリケーションの外部、PHP によって制御されるディレクトリに保存されます。これにより通常は作業が簡素化されますが、同じディレクトリに書き込みを行う他のアプリケーションの最大有効期間の設定が短い場合、一部のセッション有効期限関連のオプションが期待どおりに機能しない場合があります。

If you prefer, you can use the session.handler.native_file service as handler_id to let Symfony manage the sessions itself. Another useful option is save_path, which defines the directory where Symfony will store the session metadata files:

必要に応じて、session.handler.native_file サービス ashandler_id を使用して、Symfony にセッション自体を管理させることができます。もう 1 つの便利なオプションは、symfony がセッション メタデータ ファイルを保存するディレクトリを定義する save_path です。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
# config/packages/framework.yaml
framework:
    session:
        # ...
        handler_id: 'session.handler.native_file'
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'

Check out the Symfony config reference to learn more about the other available Session configuration options. You can also store sessions in a database.

Symfony の構成リファレンスをチェックして、他の利用可能なセッション構成オプションの詳細を確認してください。セッションをデータベースに保存することもできます。

Basic Usage

The session is available through the Request object and the RequestStack service. Symfony injects the request_stack service in services and controllers if you type-hint an argument with RequestStack:

セッションは、Request オブジェクトと RequestStackservice を介して利用できます。 RequestStack で引数をタイプヒントすると、symfony はサービスとコントローラーに request_stack サービスを注入します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use Symfony\Component\HttpFoundation\RequestStack;

class SomeService
{
    private $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;

        // Accessing the session in the constructor is *NOT* recommended, since
        // it might not be accessible yet or lead to unwanted side-effects
        // $this->session = $requestStack->getSession();
    }

    public function someMethod()
    {
        $session = $this->requestStack->getSession();

        // stores an attribute in the session for later reuse
        $session->set('attribute-name', 'attribute-value');

        // gets an attribute by name
        $foo = $session->get('foo');

        // the second argument is the value returned when the attribute doesn't exist
        $filters = $session->get('filters', []);

        // ...
    }
}

Stored attributes remain in the session for the remainder of that user's session. By default, session attributes are key-value pairs managed with the AttributeBag class.

保存された属性は、そのユーザーのセッションの残りの間、セッションに残ります。デフォルトでは、セッション属性は、AttributeBag クラスで管理されるキーと値のペアです。

Avoid Starting Sessions for Anonymous Users

Sessions are automatically started whenever you read, write or even check for the existence of data in the session. This may hurt your application performance because all users will receive a session cookie. In order to prevent that, you must completely avoid accessing the session.

セッション内のデータの読み取り、書き込み、または存在を確認するたびに、セッションが自動的に開始されます。すべてのユーザーがセッション Cookie を受け取るため、アプリケーションのパフォーマンスが低下する可能性があります。それを防ぐには、セッションへのアクセスを完全に回避する必要があります。

More about Sessions