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.