বিবরণ
workerman 4.x সংস্করণ থেকে HTTP পরিষেবার সহায়তা বাড়িয়েছে। এটি অনুরোধ ক্লাস, প্রতিক্রিয়া ক্লাস, সেশন ক্লাস এবং SSE পরিচয় করিয়েছে। যদি আপনি workerman এর HTTP পরিষেবা ব্যবহার করতে চান, তবে workerman 4.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::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::runAll();
সেশনে একটি মান পেতে
$session = $request->session();
$name = $session->get('name');
যদি তথ্য বিদ্যমান না থাকে তবে এটি null ফেরত দেয়।
আপনি get পদ্ধতির দ্বিতীয় প্যারামিটারে একটি ডিফল্ট মানও সরবরাহ করতে পারেন, যদি সেশন অ্যারেতে সংশ্লিষ্ট মান পাওয়া না যায় তবে এটি ডিফল্ট মান ফেরত দেয়। যেমন:
$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::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::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::runAll();
একটি মান পেতে এবং মুছতে
$session = $request->session();
$name = $session->pull('name');
এর প্রভাব নিচের কোডের সাথে সমান
$session = $request->session();
$value = $session->get($name);
$session->delete($name);
যদি সংশ্লিষ্ট সেশন বিদ্যমান না থাকে তবে এটি 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::runAll();
সমস্ত সেশন ডেটা মুছুন
$request->session()->flush();
কোন ফেরত মান নেই, সেশন অবজেক্ট ধ্বংসের সময় সেশন স্বয়ংক্রিয়ভাবে সংরক্ষণ থেকে মুছে যাবে।
উদাহরণ
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::runAll();
সংশ্লিষ্ট সেশন ডেটা বিদ্যমান কি না তা পরীক্ষা করা
$session = $request->session();
$has = $session->has('name');
উপরের ক্ষেত্রে যদি সংশ্লিষ্ট সেশন বিদ্যমান না থাকে অথবা সেশন মান null হয় তবে এটি false ফেরত দেয়, অন্যথায় true।
$session = $request->session();
$has = $session->exists('name');
উপরের কোডটি সেশন ডেটা বিদ্যমান কি না তা নির্ধারণ করার জন্যও ব্যবহার করা হয়, পার্থক্য হলো যখন সংশ্লিষ্ট সেশন মান null হয়, এটি true ফেরত দেয়।
মনে রাখার বিষয়সমূহ
সেশন ব্যবহার করার সময় ক্লাসের ইনস্ট্যান্স অবজেক্ট সরাসরি সংরক্ষণ করার জন্য সুপারিশ করা হয় না, বিশেষ করে যদি সেগুলি নিয়ন্ত্রণহীন উত্স থেকে আসে, ডি-সিরিয়ালাইজেশনের সময় সম্ভাব্য ঝুঁকি সৃষ্টি করতে পারে।