Hinweise
Workerman hat ab Version 4.x die Unterstützung für den HTTP-Dienst verbessert. Es wurden Klassen für Anfragen, Antworten, Sitzungen sowie SSE eingeführt. Wenn Sie den HTTP-Dienst von Workerman verwenden möchten, wird dringend empfohlen, die Version 4.x oder höher zu verwenden.
Abrufen des Sitzungsobjekts
$session = $request->session();
Beispiel
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'));
};
// Worker ausführen
Worker::runAll();
Hinweise
- Die Sitzung muss vor dem Aufruf von
$connection->send()bearbeitet werden. - Die Sitzung wird automatisch gespeichert, wenn das Objekt zerstört wird. Speichern Sie daher das von
$request->session()zurückgegebene Objekt nicht in einer globalen Array- oder Klassenmitgliedsvariable, da die Sitzung sonst nicht gespeichert werden kann. - Die Sitzung wird standardmäßig in einer Datei auf der Festplatte gespeichert. Wenn Sie eine bessere Leistung wünschen, wird empfohlen, Redis zu verwenden.
Abrufen aller Sitzungsdaten
$session = $request->session();
$all = $session->all();
Es wird ein Array zurückgegeben. Wenn keine Sitzungsdaten vorhanden sind, wird ein leeres Array zurückgegeben.
Beispiel
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));
};
// Worker ausführen
Worker::runAll();
Abrufen eines Wertes aus der Sitzung
$session = $request->session();
$name = $session->get('name');
Wenn die Daten nicht vorhanden sind, wird null zurückgegeben.
Sie können auch einen Standardwert als zweiten Parameter an die Methode get übergeben. Wenn der entsprechende Wert im Sitzungsarray nicht gefunden wird, wird der Standardwert zurückgegeben. Zum Beispiel:
$session = $request->session();
$name = $session->get('name', 'tom');
Beispiel
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'));
};
// Worker ausführen
Worker::runAll();
Speichern einer Sitzung
Verwenden Sie die Methode set, um einen bestimmten Wert zu speichern.
$session = $request->session();
$session->set('name', 'tom');
set hat keinen Rückgabewert, die Sitzung wird automatisch gespeichert, wenn das Sitzungsobjekt zerstört wird.
Wenn mehrere Werte gespeichert werden sollen, verwenden Sie die Methode put.
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
Ebenso hat put keinen Rückgabewert.
Beispiel
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'));
};
// Worker ausführen
Worker::runAll();
Löschen von Sitzungsdaten
Verwenden Sie die Methode forget, um bestimmte Sitzungsdaten zu löschen.
$session = $request->session();
// Eine einzelne löschen
$session->forget('name');
// Mehrere löschen
$session->forget(['name', 'age']);
Außerdem bietet das System die Methode delete an, die sich von forget unterscheidet, indem sie nur einen Wert löschen kann.
$session = $request->session();
// Entspricht $session->forget('name');
$session->delete('name');
Beispiel
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');
};
// Worker ausführen
Worker::runAll();
Abrufen und Löschen eines Wertes aus der Sitzung
$session = $request->session();
$name = $session->pull('name');
Die Wirkung ist die gleiche wie bei dem folgenden Code
$session = $request->session();
$value = $session->get($name);
$session->delete($name);
Wenn die entsprechende Sitzung nicht existiert, wird null zurückgegeben.
Beispiel
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'));
};
// Worker ausführen
Worker::runAll();
Löschen aller Sitzungsdaten
$request->session()->flush();
Es gibt keinen Rückgabewert. Die Sitzung wird automatisch aus dem Speicher gelöscht, wenn das Sitzungsobjekt zerstört wird.
Beispiel
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');
};
// Worker ausführen
Worker::runAll();
Überprüfen, ob entsprechende Sitzungsdaten existieren
$session = $request->session();
$has = $session->has('name');
In diesem Fall gibt es false zurück, wenn die entsprechende Sitzung nicht existiert oder der entsprechende Sitzungswert null ist, andernfalls true.
$session = $request->session();
$has = $session->exists('name');
Der obige Code wird ebenfalls verwendet, um zu überprüfen, ob Sitzungsdaten existieren. Der Unterschied besteht darin, dass, wenn der Wert des entsprechenden Sitzungseintrags null ist, ebenfalls true zurückgegeben wird.
Hinweise
Es wird nicht empfohlen, bei der Verwendung von Sitzungen direkt Instanzobjekte von Klassen zu speichern, insbesondere nicht von nicht kontrollierbaren Klasseninstanzen, da dies beim Deserialisieren potenzielle Risiken verursachen kann.