Session Phalcon

Phalcon \ Session menyediakan penampung berorientasi objek untuk mengakses data Session Phalcon.

Alasan untuk menggunakan komponen ini bukannya raw-session adalah:

  • Anda dapat dengan mudah mengisolasi data sesi di aplikasi pada domain yang sama
  • Intercept dimana data sesi set / get dalam aplikasi Anda
  • Mengubah adaptor sesi sesuai dengan kebutuhan aplikasi

Memulai Session Phalcon 

Beberapa aplikasi dgn session-intensif, hampir setiap tindakan yang dilakukan membutuhkan akses ke data sesi. Ada juga yang mengakses data sesi santai/jarang. Berkat service container, kita dapat memastikan bahwa sesi diakses hanya ketika itu jelas diperlukan:

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

Menyimpan / Mengambil data di Sesi 

Dari controller, view atau komponen lain yang extend dr Phalcon \ DI \ Injectable, Anda dapat mengakses layanan sesi dan menyimpan barang-barang dan mengambilnya dengan cara berikut:

<?php

class UserController extends Phalcon\Mvc\Controller
{

    public function indexAction()
    {
        //Set a session variable
        $this->session->set("user-name", "Michael");
    }

    public function welcomeAction()
    {

        //Check if the variable is defined
        if ($this->session->has("user-name")) {

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

}

Menghapus / Menghancurkan Sesi 

mungkin perlu untuk menghapus variabel tertentu atau menghancurkan seluruh sesi:

<?php

class UserController extends Phalcon\Mvc\Controller
{

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

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

}

Mengisolasi data Session antara Aplikasi 

Kadang seorang user dapat menggunakan aplikasi yang sama dua kali, pada server yang sama, dalam sesi yang sama. Tentunya, jika kita menggunakan variabel dalam sesi, kita ingin bahwa setiap aplikasi memiliki data sesi yang terpisah (meskipun kode yang sama dan nama variabel yang sama). Untuk mengatasi ini, Anda dapat menambahkan awalan untuk setiap variabel sesi yg dibuat dalam sebuah aplikasi tertentu:

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

Kantung Sesi 

Phalcon \ Session \ Bag adalah komponen yang membantu memisahkan data sesi ke “namespace”. Bekerja dengan cara ini Anda dapat dengan mudah membuat kelompok variabel sesi ke dalam aplikasi. Dengan hanya pengaturan variabel dalam “kantong”, secara otomatis disimpan dalam sesi:

<?php

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

Data Persistent dalam Komponen 

Controller, komponen dan kelas yang extend dr Phalcon \ DI \ iInjectable dapat menyuntikkan Phalcon \ Session \ Bag . Kelas ini mengisolasi variabel untuk setiap kelas. Berkat ini Anda dapat menjaga data secara persistent  antar reques di setiap kelas dengan cara yang independen

<?php

class UserController extends Phalcon\Mvc\Controller
{

    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;
        }
    }

}

Dalam komponen:

<?php

class Security extends Phalcon\Mvc\User\Component
{

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

    public function getAuthName()
    {
        return $this->persistent->name;
    }

}

Data ditambahkan ke sesi ($this->session) yang tersedia di seluruh aplikasi, sementara persistent ($this->persistent) hanya dapat diakses dalam lingkup kelas tersebut dimana properti persistent menempel.

Menerapkan adapter Anda sendiri 

antarmuka Phalcon \ Session \ AdapterInterface  harus diimplementasikan dalam rangka menciptakan adapter sesi anda sendiri atau memperpanjang yang sudah ada.

Ada lebih banyak adapter yang tersedia untuk komponen ini di Phalcon Inkubator