Descrizione
Workerman a partire dalla versione 4.x ha potenziato il supporto per i servizi HTTP. Sono state introdotte le classi Request, Response, Session e SSE. Se desideri utilizzare i servizi HTTP di Workerman, è fortemente consigliato di utilizzare Workerman 4.x o versioni successive.
Ottenere l'oggetto sessione
$session = $request->session();
Esempio
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'));
};
// Esegui il worker
Worker::runAll();
Avvertenze
- La sessione deve essere manipolata prima della chiamata a
$connection->send(). - La sessione viene automaticamente salvata quando l'oggetto viene distrutto, quindi non memorizzare l'oggetto restituito da
$request->session()in un array globale o in un campo di classe, altrimenti la sessione non verrà salvata. - La sessione è memorizzata per impostazione predefinita in un file sul disco; se desideri prestazioni migliori, si consiglia di utilizzare Redis.
Ottenere tutti i dati della sessione
$session = $request->session();
$all = $session->all();
Restituisce un array. Se non ci sono dati di sessione, restituisce un array vuoto.
Esempio
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));
};
// Esegui il worker
Worker::runAll();
Ottenere un valore dalla sessione
$session = $request->session();
$name = $session->get('name');
Se il dato non esiste, restituisce null.
Puoi anche passare un valore di default come secondo parametro al metodo get; se non viene trovato un valore corrispondente nell'array di sessione, verrà restituito il valore di default. Ad esempio:
$session = $request->session();
$name = $session->get('name', 'tom');
Esempio
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'));
};
// Esegui il worker
Worker::runAll();
Memorizzare la sessione
Per memorizzare un determinato dato, utilizza il metodo set.
$session = $request->session();
$session->set('name', 'tom');
Il metodo set non restituisce un valore; la sessione viene automaticamente salvata quando l'oggetto sessione viene distrutto.
Quando si memorizzano più valori, si utilizza il metodo put.
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
Allo stesso modo, put non restituisce un valore.
Esempio
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'));
};
// Esegui il worker
Worker::runAll();
Eliminare dati dalla sessione
Per eliminare uno o più dati dalla sessione, utilizza il metodo forget.
$session = $request->session();
// Eliminare un elemento
$session->forget('name');
// Eliminare più elementi
$session->forget(['name', 'age']);
Inoltre, il sistema fornisce il metodo delete, che a differenza di forget, può eliminare solo un elemento.
$session = $request->session();
// Equivalente a $session->forget('name');
$session->delete('name');
Esempio
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');
};
// Esegui il worker
Worker::runAll();
Ottenere e eliminare un valore dalla sessione
$session = $request->session();
$name = $session->pull('name');
Il risultato è equivalente al seguente codice:
$session = $request->session();
$value = $session->get($name);
$session->delete($name);
Se la sessione corrispondente non esiste, restituisce null.
Esempio
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'));
};
// Esegui il worker
Worker::runAll();
Eliminare tutti i dati della sessione
$request->session()->flush();
Non restituisce valori; i dati della sessione vengono automaticamente eliminati dallo storage quando l'oggetto sessione viene distrutto.
Esempio
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');
};
// Esegui il worker
Worker::runAll();
Verificare se i dati della sessione esistono
$session = $request->session();
$has = $session->has('name');
Il codice di cui sopra restituisce false se la sessione corrispondente non esiste o il valore della sessione corrisponde a null, altrimenti restituisce true.
$session = $request->session();
$has = $session->exists('name');
Il codice di cui sopra è utilizzato anche per verificare se i dati della sessione esistono; la differenza è che quando il valore della sessione corrispondente è null, restituisce comunque true.
Avvertenze
Quando utilizzi le sessioni, non è consigliabile memorizzare direttamente oggetti istanza di classe, specialmente istanze di classi di origine non controllabile, poiché la deserializzazione potrebbe comportare rischi potenziali.