ওয়েবম্যান সেশন ব্যবস্থাপনা
উদাহরণ
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$name = $request->get('name');
$session = $request->session();
$session->set('name', $name);
return response('hello ' . $session->get('name'));
}
}
$request->session();
ব্যবহার করে Workerman\Protocols\Http\Session
এর একটি ইনস্ট্যান্স পান, ইনস্ট্যান্সের পদ্ধতি ব্যবহার করে সেশন তথ্য যোগ, পরিবর্তন বা মুছে ফেলুন।
সতর্কতা: সেশন অবজেক্ট ধ্বংসকালে সেশন তথ্য স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে, তাই
$request->session()
দ্বারা ফেরত আসা অবজেক্টটিকে গ্লোবাল অ্যারে বা ক্লাসের সদস্যের মধ্যে সংরক্ষণ করবেন না, এর ফলে সেশন সংরক্ষণ করা যাবে না।
সমস্ত সেশন তথ্য পান
$session = $request->session();
$all = $session->all();
ফলস্বরূপ একটি অ্যারে ফেরত দেয়। যদি কোন সেশন তথ্য না থাকে, তবে একটি খালি অ্যারে ফেরত দেবে।
সেশন থেকে একটি মান পান
$session = $request->session();
$name = $session->get('name');
যদি তথ্য না থাকে, তাহলে null ফেরত দেবে।
আপনি get পদ্ধতির দ্বিতীয় পরামিতি হিসাবে একটি ডিফল্ট মানও পাস করতে পারেন, যদি সেশন অ্যারে তে সংশ্লিষ্ট মান পাওয়া না যায় তবে ডিফল্ট মান ফেরত পাওয়া যাবে। উদাহরণস্বরূপ:
$session = $request->session();
$name = $session->get('name', 'tom');
সেশন সংরক্ষণ
একটি তথ্য সংরক্ষণ করতে set পদ্ধতি ব্যবহার করুন।
$session = $request->session();
$session->set('name', 'tom');
set কোন ফেরত মান নেই, সেশন অবজেক্ট ধ্বংসকালে সেশন স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে।
একাধিক মান সংরক্ষণের জন্য put পদ্ধতি ব্যবহার করুন।
$session = $request->session();
$session->put(['name' => 'tom', 'age' => 12]);
এখনও, put এরও কোন ফেরত মান নেই।
সেশন তথ্য মুছে ফেলুন
একটি অথবা একাধিক সেশন তথ্য মুছতে forget
পদ্ধতি ব্যবহার করুন।
$session = $request->session();
// একটি মুছে ফেলুন
$session->forget('name');
// একাধিক মুছে ফেলুন
$session->forget(['name', 'age']);
অন্যদিকে সিস্টেম একটি delete পদ্ধতি প্রদান করেছে, যা forget পদ্ধতির থেকে আলাদা, delete শুধুমাত্র একটি তথ্য মুছে ফেলতে পারে।
$session = $request->session();
// সমান $session->forget('name');
$session->delete('name');
সেশন থেকে একটি মান পান এবং মুছে ফেলুন
$session = $request->session();
$name = $session->pull('name');
ফলস্বরূপ কোডের সাথে একই প্রভাব রয়েছে:
$session = $request->session();
$value = $session->get($name);
$session->delete($name);
যদি সংশ্লিষ্ট সেশন না থাকে, তাহলে null ফেরত দেবে।
সমস্ত সেশন তথ্য মুছে ফেলুন
$request->session()->flush();
কোনো ফেরত মান নেই, সেশন অবজেক্ট ধ্বংসকালে সেশন স্বয়ংক্রিয়ভাবে স্টোরেজ থেকে মুছে ফেলা হবে।
সংশ্লিষ্ট সেশন তথ্য বিদ্যমান কি না যাচাই করুন
$session = $request->session();
$has = $session->has('name');
উপরোক্ত কোডের অধীনে যখন সংশ্লিষ্ট সেশন বিদ্যমান নয় অথবা সংশ্লিষ্ট সেশন মান null হলে false ফেরত দেয়, অন্যথায় true ফেরত দেয়।
$session = $request->session();
$has = $session->exists('name');
উপরোক্ত কোডটি সেশন তথ্য বিদ্যমান কি না যাচাই করার জন্য ব্যবহৃত হয়, পার্থক্য হলো যখন সংশ্লিষ্ট সেশনটির মান null হয়, তখনও true ফেরত দেয়।
সহায়ক ফাংশন session()
ওয়েবম্যান একটি সহায়ক ফাংশন session()
প্রদান করে একই কাজ সম্পন্ন করার জন্য।
// সেশন ইনস্ট্যান্স পান
$session = session();
// সমতুল্য
$session = $request->session();
// একটি মান পান
$value = session('key', 'default');
// সমতুল্য
$value = session()->get('key', 'default');
// সমতুল্য
$value = $request->session()->get('key', 'default');
// সেশনে মান সেট করুন
session(['key1'=>'value1', 'key2' => 'value2']);
// সমতুল্য
session()->put(['key1'=>'value1', 'key2' => 'value2']);
// সমতুল্য
$request->session()->put(['key1'=>'value1', 'key2' => 'value2']);
কনফিগারেশন ফাইল
সেশন কনফিগারেশন ফাইল config/session.php
এ রয়েছে, বিষয়বস্তু এর মতো:
use Webman\Session\FileSessionHandler;
use Webman\Session\RedisSessionHandler;
use Webman\Session\RedisClusterSessionHandler;
return [
// FileSessionHandler::class অথবা RedisSessionHandler::class অথবা RedisClusterSessionHandler::class
'handler' => FileSessionHandler::class,
// handler যখন FileSessionHandler::class তখন মান হবে file,
// handler যখন RedisSessionHandler::class তখন মান হবে redis
// handler যখন RedisClusterSessionHandler::class তখন মান হবে redis_cluster অর্থাৎ redis ক্লাস্টার
'type' => 'file',
// ভিন্ন ভিন্ন হ্যান্ডলারের জন্য ভিন্ন ভিন্ন কনফিগারেশন
'config' => [
// type=file হলে কনফিগারেশন
'file' => [
'save_path' => runtime_path() . '/sessions',
],
// type=redis হলে কনফিগারেশন
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 2,
'database' => '',
'prefix' => 'redis_session_',
],
'redis_cluster' => [
'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
'timeout' => 2,
'auth' => '',
'prefix' => 'redis_session_',
]
],
'session_name' => 'PHPSID', // সেশন_id সংরক্ষণের জন্য কুকি নাম
'auto_update_timestamp' => false, // কি স্বয়ংক্রিয়ভাবে সেশন আপডেট হবে, ডিফল্ট বন্ধ
'lifetime' => 7*24*60*60, // সেশনের মেয়াদ শেষ হওয়ার সময়
'cookie_lifetime' => 365*24*60*60, // সেশন_id কুকির মেয়াদ শেষ হওয়ার সময়
'cookie_path' => '/', // সেশন_id কুকির পাথ
'domain' => '', // সেশন_id কুকির ডোমেইন
'http_only' => true, // কি httpOnly অন করে দেওয়া হবে, ডিফল্ট অন
'secure' => false, // শুধুমাত্র https তে সেশন চালু হবে, ডিফল্ট বন্ধ
'same_site' => '', // CSRF আক্রমণ এবং ব্যবহারকারী ট্র্যাকিং প্রতিরোধের জন্য, ঐচ্ছিক মান strict/lax/none
'gc_probability' => [1, 1000], // সেশন পুনরুদ্ধারের সম্ভাব্যতা
];
নিরাপত্তা সম্পর্কিত
সেশন ব্যবহার করার সময় ক্লাসের ইনস্ট্যান্স অবজেক্ট সরাসরি সংরক্ষণ করা অত্যন্ত সুপারিশ করা হয় না, বিশেষ করে অযাচিত ক্লাস ইনস্ট্যান্সের জন্য, ডি-সিরিয়ালাইজেশনের সময় এটি পোটেনশিয়াল ঝুঁকি তৈরি করতে পারে।