คำอธิบาย

ตั้งแต่เวอร์ชัน 4.x ของ workerman ได้เสริมการสนับสนุนบริการ HTTP โดยในเวอร์ชันนี้มีการนำเข้าคลาสของ request, response, session และ SSE ถ้าคุณต้องการใช้บริการ HTTP ของ workerman แนะนำให้ใช้เวอร์ชัน 4.x หรือเวอร์ชันที่สูงกว่า

โปรดระวังว่านี้เป็นการใช้งานของ workerman เวอร์ชัน 4.x เท่านั้น ไม่สามารถใช้งานได้กับ workerman เวอร์ชัน 3.x

รับออบเจกต์เซสชัน

$session = $request->session();

ตัวอย่าง

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
Worker::runAll();

ข้อควรระวัง

  • ต้องการจัดการเซสชันก่อนเรียก $connection->send()
  • เมื่อวัตถุเซสชันถูกทำลาย จะบันทึกการเปลี่ยนแปลงโดยอัตโนมัติ ดังนั้นอย่าเก็บวัตถุที่ได้จาก $request->session() ไว้ในอาร์เรย์ทั่วไปหรือเป็นฟิลด์ของคลาส ซึ่งอาจทำให้เซสชันไม่สามารถบันทึกได้
  • ค่าเริ่มต้นของเซสชันจะถูกบันทึกในไฟล์แฟ้ม หากต้องการประสิทธิภาพที่ดีขึ้นแนะนำให้ใช้ Redis

รับข้อมูลเซสชันทั้งหมด

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

คืนค่าเป็นอาร์เรย์ หากไม่มีข้อมูลเซสชันใดๆ จะคืนค่าเป็นอาร์เรย์ว่าง

ตัวอย่าง

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
Worker::runAll();

รับค่าในเซสชัน

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

หากข้อมูลไม่มีจะคืนค่าเป็น null

คุณสามารถส่งค่าเริ่มต้นเป็นอาร์กิวเมนต์สองหากค้นหาไม่เจอค่าที่ต้องการจะคืนค่าเริ่มต้น ตัวอย่างเช่น:

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

ตัวอย่าง

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
Worker::runAll();

บันทึกเซสชัน

เพื่อบันทึกข้อมูลในเซสชันใช้เมทอด set

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

set ไม่มีการคืนค่า และเซสชันจะถูกบันทึกอัตโนมัติเมื่อวัตถุเซสชันถูกทำลาย

เมื่อต้องการบันทึกค่ามากกว่าหนึ่งค่าใช้เมทอด put

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

เช่นเดียวกัน put ไม่มีการคืนค่า

ตัวอย่าง

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
Worker::runAll();

ลบข้อมูลเซสชัน

เพื่อลบข้อมูลเซสชันใช้เมทอด forget

$session = $request->session();
// ลบข้อมูล
$session->forget('name');
// ลบหลายข้อมูล
$session->forget(['name', 'age']);

นอกจากนี้ยังมีเมทอด delete ซึ่งต่างจาก forget โดย delete สามารถลบข้อมูลเพียงหนึ่งอย่าง

$session = $request->session();
// เหมือนกับ $session->forget('name');
$session->delete('name');

ตัวอย่าง

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
Worker::runAll();

รับค่าและลบค่า session กลายเป็น

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

ผลเท่ากับรหัสด้านล่าง

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

ถ้า session ที่สอดคต่านั้นไม่มีอยู่ จะคืนค่าเป็น null

ตัวอย่าง

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
Worker::runAll();

ลบข้อมูล session ทั้งหมด

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

ไม่มีค่าที่คืน, เมื่อ object session ถูกทำลาย session จะถูกลบโดยอัตโนมัติ

ตัวอย่าง

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
Worker::runAll();

ตรวจสอบว่าข้อมูล session ที่สอดคต่านั้นมีหรือไม่

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

เมื่อ session ที่สอดคต่านั้นไม่มีหรือค่าของ session ที่สอดคต่านั้นเป็นค่า null จะได้รับค่าเป็น false, มิฉะนั้นจะได้รับค่าเป็น true

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

การจะตรวจสอบข้อมูล session ว่ามีหรือไม่มี เช่นกัน คือจะต่างกันตรงที่เมื่อค่าของ session ที่สอดคต่านั้นเท่ากับ null จะได้รับค่าเป็น true ด้วย