Working with Session in Phalcon PHP Framework

เริ่มใช้งาน Session

ที่ app/config/service.php ให้เพิ่ม Dependency Injector เพื่อใช้งาน Session เข้าไป

<?php

//Start the session the first time when some component request the session service
$di->setShared('session', function() {
    $session = new Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
});

get และ set ข้อมูลใน Session

//Set a session variable
$this->session->set("user-name", "Michael");
//Check if the variable is defined
 if ($this->session->has("user-name")) {

     //Retrieve its value
     $name = $this->session->get("user-name");
 }

จะเห็นว่า เราใช้ $this->session->set และ $this->session->get ในการทำงานกับ Session

Removing/Destroying Sessions

public function removeAction()  
{
    //Remove a session variable
    $this->session->remove("user-name");
}

public function logoutAction()  
{
    //Destroy the whole session
    $this->session->destroy();
}

ไม่มีอะไรมาก ใช้ $this->session->remove เพื่อลบตัวแปร session และใช้ $this->session->destroy(); เพื่อ clear ตัวแปร session ทั้งหมด

กำหนด prefix ให้ session

แน่นอนว่า ถ้า Server เรารันมากกว่าหนึ่งระบบ และมีการใช้ Session ด้วย จะเป็นเรื่องสวยงามมาก ถ้าเราแยก session ของแต่ละระบบออกจากกัน (เพื่อป้องกัน การชนกัน ของ session โดยไม่ได้ตั้งใจ) การกำหนด prefix ของแต่ละระบบให้ session เป็นทางออกที่ดี

สิ่งที่ต้องทำคือ เพิ่ม parameter เข้าไปตอนเริ่มใช้งาน Session

<?php

//Isolating the session data
$di->set('session', function(){

    //All variables created will prefixed with "my-app-1"
    $session = new Phalcon\Session\Adapter\Files(
        array(
            'uniqueId' => 'my-app-1'
        )
    );

    $session->start();

    return $session;
});

Session Bags ถุงใส่ Session

เป็น Component ที่ช่วยแยก Session ไว้ใน namespace ทำให้เราจัดกลุ่มของ Session ได้ง่ายๆ

<?php

$user = new Phalcon\Session\Bag('user');
$user->setDI($di);
$user->name = "Kimbra Johnson";
$user->age  = 22;

Persistent Data

ฟีเจอร์นี้ทำให้ชีวิตเราสบายขึ้น เพราะเราสามารถเรียกใช้ตัวแปร Session ได้จาก Method หรือ Actions ไหนก็ได้ เช่น

public function indexAction()  
{
    // Create a persistent variable "name"
    $this->persistent->name = "Laura";
}

public function welcomeAction()  
{
    if (isset($this->persistent->name))
    {
        echo "Welcome, ", $this->persistent->name;
    }
}