वेबमैन सत्र प्रबंधन

उदाहरण

<?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');

उपरोक्त कोड तब false लौटाता है जब संबंधित सत्र न हो या संबंधित सत्र मान null हो, अन्यथा यह 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 है 
    '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],     // सत्र को पुनः चक्रित करने की संभावना
];

सुरक्षा संबंधी

सत्र का उपयोग करते समय सीधे वर्ग की उदाहरण वस्तुओं को सहेजने की सिफारिश नहीं की जाती है, विशेष रूप से नियंत्रित स्रोतों से आए वर्ग के उदाहरण, डीसिरियलाइजेशन के दौरान संभावित जोखिम हो सकता है।