Description

Workerman a renforcé le support des services HTTP à partir de la version 4.x. Il introduit des classes pour les requêtes, les réponses, les sessions ainsi que SSE. Si vous souhaitez utiliser le service HTTP de Workerman, nous vous recommandons fortement d’utiliser la version 4.x ou une version ultérieure.

Obtenir l'objet session

$session = $request->session();

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $session = $request->session();
    $session->set('name', 'tome');
    $connection->send($session->get('name'));
};

// Exécuter le worker
Worker::runAll();

Remarques

  • La session doit être manipulée avant l'appel de $connection->send().
  • La session est automatiquement sauvegardée lors de la destruction de l'objet, donc ne conservez pas l'objet retourné par $request->session() dans un tableau global ou un membre de classe, ce qui empêcherait la sauvegarde de la session.
  • Par défaut, la session est stockée dans des fichiers sur disque, pour de meilleures performances, il est conseillé d'utiliser Redis.

Obtenir toutes les données de session

$session = $request->session();
$all = $session->all();

Cela retourne un tableau. Si aucune donnée de session n'existe, un tableau vide est retourné.

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $session = $request->session();
    $session->set('name', 'tom');
    $connection->send(var_export($session->all(), true));
};

// Exécuter le worker
Worker::runAll();

Obtenir une valeur de la session

$session = $request->session();
$name = $session->get('name');

Si les données n'existent pas, cela retourne null.

Vous pouvez également passer une valeur par défaut en second paramètre à la méthode get, si la valeur correspondante n'est pas trouvée dans le tableau de session, la valeur par défaut est retournée. Par exemple :

$session = $request->session();
$name = $session->get('name', 'tom');

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $session = $request->session();
    $connection->send($session->get('name', 'tom'));
};

// Exécuter le worker
Worker::runAll();

Stocker une session

Pour stocker une donnée, on utilise la méthode set.

$session = $request->session();
$session->set('name', 'tom');

La méthode set n'a pas de valeur de retour, la session est automatiquement sauvegardée lors de la destruction de l'objet.

Lors de la sauvegarde de plusieurs valeurs, utilisez la méthode put.

$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);

De même, put n'a pas de valeur de retour.

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $session = $request->session();
    $session->set('name', 'tom');
    $connection->send($session->get('name'));
};

// Exécuter le worker
Worker::runAll();

Supprimer des données de session

Pour supprimer une ou plusieurs données de session, utilisez la méthode forget.

$session = $request->session();
// Supprimer un élément
$session->forget('name');
// Supprimer plusieurs éléments
$session->forget(['name', 'age']);

De plus, le système fournit la méthode delete, qui, contrairement à forget, ne peut supprimer qu'un seul élément.

$session = $request->session();
// Équivalent à $session->forget('name');
$session->delete('name');

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $request->session()->forget('name');
    $connection->send('ok');
};

// Exécuter le worker
Worker::runAll();

Obtenir et supprimer une valeur de session

$session = $request->session();
$name = $session->pull('name');

L'effet est identique au code suivant

$session = $request->session();
$value = $session->get($name);
$session->delete($name);

Si la session correspondante n'existe pas, cela retourne null.

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $connection->send($request->session()->pull('name'));
};

// Exécuter le worker
Worker::runAll();

Supprimer toutes les données de session

$request->session()->flush();

Il n'y a pas de valeur de retour, la session sera automatiquement supprimée du stockage lors de la destruction de l'objet session.

Exemple

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:8080');

$worker->onMessage = function(TcpConnection $connection, Request $request)
{
    $request->session()->flush();
    $connection->send('ok');
};

// Exécuter le worker
Worker::runAll();

Vérifier si les données de session existent

$session = $request->session();
$has = $session->has('name');

Cela retourne false si la session correspondante n'existe pas ou si la valeur de session correspondante est null, sinon cela retourne true.

$session = $request->session();
$has = $session->exists('name');

Ce code est également utilisé pour vérifier si des données de session existent, la différence est que lorsqu'une valeur de session correspondante est null, cela retourne également true.

Remarques

Lors de l'utilisation de session, il n'est pas recommandé de stocker directement des instances d'objets de classe, en particulier celles dont l'origine n'est pas contrôlable, car cela peut poser des risques potentiels lors de la désérialisation.