hyperf/docs/en/session.md
nonetallt 6f8f0f2a4e
Add docs/en/session.md (#3491)
* Add docs/en/session.md

* Update

Co-authored-by: 李铭昕 <715557344@qq.com>
2021-04-16 17:49:08 +08:00

5.1 KiB

Session management

HTTP is a stateless protocol, meaning that the server does not retain any state during transactions with clients. However, when developing web applications there's often a need to share information between multiple requests, which is usually done via session storage. You can implement the session functionality with hyperf/session. The session component currently only implements two storage drivers, namely file and Redis. The default is file driver. In a production environment, we strongly recommend that you use Redis as it has much better performance compared to the file alternative and is also better suited for cluster architecture.

Installation

composer require hyperf/session

Configuration

The configuration of the session component is stored in the config/autoload/session.php file. If the file does not exist, you can use the php bin/hyperf.php vendor:publish hyperf/session command to publish the configuration file of the session component.

Configure session middleware

Before using session, you need to configure the Hyperf\Session\Middleware\SessionMiddleware middleware as the global middleware of the HTTP Server so that the component can intercept the request for processing. You can define middlewares in config/autoload/middlewares.php configuration file. Example configuration:

<?php

return [
    // Here http corresponds to the default server name. If you need to use session on other servers, you need to configure the corresponding global middleware
    'http' => [
        \Hyperf\Session\Middleware\SessionMiddleware::class,
    ],
];

Configure storage driver

Modify different session storage drivers by changing the handler configuration in the configuration file, and the specific configuration items of the corresponding handler are determined by the different configuration items in the options.

Use file storage driver

The file storage driver is the default storage driver, but it is recommended to use the Redis driver in a production environment

When the value of handler is Hyperf\Session\Handler\FileHandler, it indicates that the file storage driver is used and all session data files will be generated and stored in the folder corresponding to the options.path configuration value. The default configuration folder is in the runtime/session folder under the root directory.

Use Redis driver

Before using the Redis storage driver, you need to install the hyperf/redis component. To use this storage driver set the value of handler to Hyperf\Session\Handler\RedisHandler. You can adjust the Redis connection used by the driver by configuring the options.connection configuration value. The connections are defined in config/autoload/redis.php of the hyperf/redis component.

Use

Get session object

The session object can be accessed by injecting Hyperf\Contract\SessionInterface:

<?php

namespace App\Controller;

use Hyperf\Di\Annotation\Inject;

class IndexController
{
    /**
     * @Inject()
     * @var \Hyperf\Contract\SessionInterface
     */
    private $session;

    public function index()
    {
        // Use directly via $this->session
    }
}

Store data

When you want to store data in the session, you can do so by calling the set(string $name, $value): void method:

<?php

$this->session->set('foo','bar');

Retrieve data

When you want to get data from the session, you can do so by calling the get(string $name, $default = null) method:

<?php

$this->session->get('foo', $default = null);

Get all data

You can get all the stored data from the session at once by calling the all(): array method:

<?php

$data = $this->session->all();

Determine whether there is a value in the session

To determine whether a value exists in the session, you can use the has(string $name): bool method. If the value exists and is not null, the has method will return true:

<?php

if ($this->session->has('foo')) {
    //
}

Get and delete a piece of data

By calling the remove(string $name) method, you can retrieve and delete a piece of data from the session using only one method:

<?php

$data = $this->session->remove('foo');

Delete one or more pieces of data

By calling the forget(string|array $name): void method, one or more pieces of data can be deleted from the session using only one method. When a string is passed, it means that only one piece of data is deleted. When a key string array is passed, it means to delete multiple pieces of data:

<?php

$this->session->forget('foo');
$this->session->forget(['foo','bar']);

Clear the current session data

You can clear all the data in the current session by calling the clear(): void method:

<?php

$this->session->clear();

Get the current session ID

When you want to get the current session ID to handle some logic by yourself, you can get the current session ID by calling the getId(): string method:

<?php

$sessionId = $this->session->getId();