Descripción
A partir de la versión 4.x, Workerman ha reforzado el soporte para servicios HTTP. Se han introducido clases de solicitud, clases de respuesta, clases de sesión y SSE. Si quieres utilizar los servicios HTTP de Workerman, se recomienda encarecidamente que utilices la versión 4.x o una versión posterior.
Tenga en cuenta que todos los ejemplos siguientes son para la versión 4.x de Workerman y no son compatibles con la versión 3.x.
Obtener el objeto de sesión
$session = $request->session();
Ejemplo
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'));
};
// Ejecutar worker
Worker::runAll();
Consideraciones
- La sesión debe ser operada antes de llamar a
$connection->send()
. - La sesión se guarda automáticamente cuando se destruye el objeto, así que no guardes el objeto devuelto por
$request->session()
en un arreglo global o en un miembro de una clase, ya que esto podría impedir que la sesión se guarde. - La sesión se almacena por defecto en archivos en disco, pero se recomienda usar Redis para obtener un mejor rendimiento.
Obtener todos los datos de la sesión
$session = $request->session();
$all = $session->all();
Devuelve un array. Si no hay datos de sesión, devuelve un array vacío.
Ejemplo
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));
};
// Ejecutar worker
Worker::runAll();
Obtener un valor específico de la sesión
$session = $request->session();
$name = $session->get('name');
Devuelve null
si el dato no existe.
También puedes pasar un valor predeterminado como segundo argumento al método get
. Si no se encuentra el valor correspondiente en la matriz de sesión, se devolverá el valor predeterminado. Por ejemplo:
$session = $request->session();
$name = $session->get('name', 'tom');
Ejemplo
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'));
};
// Ejecutar worker
Worker::runAll();
Almacenar datos de sesión
Para almacenar un dato, utiliza el método set
.
$session = $request->session();
$session->set('name', 'tom');
El método set
no devuelve ningún valor y la sesión se guardará automáticamente al destruir el objeto.
Cuando necesites almacenar múltiples valores, utiliza el método put
.
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
De igual manera, put
no devuelve ningún valor.
Ejemplo
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'));
};
// Ejecutar worker
Worker::runAll();