Memahami Session dalam Aplikasi Web


Posted:   |   Read in English   |  More posts about php session http

Session dalam aplikasi web adalah untuk mengatasi masalah yang berkaitan dengan sifat stateless dalam protokol HTTP. Contohnya apabila kita melayari satu laman web, dan membuka laman utama dan kemudian laman yang kedua, server tidak akan dapat mengenalpasti orang yang mengakses laman kedua adalah orang yang sama mengakses laman pertama tadi. Ini menyebabkan masalah apabila kita ingin membangunkan aplikasi di mana sebahagian daripada laman kita adalah untuk pengguna tertentu sahaja. Ataupun aplikasi yang perlu menyimpan data apa yang user lakukan pada laman pertama, dan seterusnya memaparkan di laman yang kedua atau seterusnya. Contohnya sebuah laman e-commerce yang mempunyai fungsi shopping cart. Di laman pertama, pengguna akan add barangan yang ingin dibeli ke dalam cart. Bila pengguna membuka laman lain di website tersebut, kita mungkin ingin memaparkan kepada pengguna apa yang telah mereka masukkan ke dalam cart.

Protokol HTTP mempunyai konsep cookie, di mana apabila pengguna mengakses laman web kita, kita boleh 'tanam' data yang akan disimpan dalam komputer pengguna. Setiap kali mereka mengakses laman kita, data tersebut akan dihantar sekali. Ini membolehkan kita mengenalpasti pengguna ini telah pun melawat laman kita sebelum ini. Jadi secara teori, kita boleh menggunakan cookie ini untuk menyelesaikan masalah berkaitan shopping cart sebelum ini. Kita boleh simpan barang yang pengguna masukkan ke dalam cart di dalam cookie. Cookie bagaimana pun mempunyai beberapa masalah seperti saiz yang terhad (4K) dan juga pengguna boleh mengubah data yang disimpan di dalam cookie sesuka hati mereka. Ada cara untuk mengelakkan data dalam cookie diubah namun ia di luar skop artikel ini.

Jadi satu teknik baru untuk menyimpan data pengguna digunakan - ia dipanggil session. Ia masih menggunakan cookie tetapi tidak menyimpan kesemua data ke dalam cookie. Sebaliknya apa yang disimpan dalam cookie hanyalah rujukan (reference / pointer) kepada data sebenar yang di simpan di bahagian server. Apa yang disimpan dalam cookie hanyalah ID unik yang boleh digunakan untuk query data store di server bagi mendapatkan data sebenar. data store ini boleh jadi berbentuk file (default storage PHP session), row dalam database dan sebagainya. Dalam tulisan ini, saya cuba menunjukkan konsep asas implementasi session menggunakan bahasa pengaturcaraan PHP.

Berikut adalah kod utama yang akan implement session bagi web aplikasi kita. Kod ini boleh disimpan dalam fail bernama mysession.php:-

<?php
/* This is for learning purpose only - just to show how session in theory being 
implemented. For real session usage, use the session provided by your web framework.
*/

$HERE = realpath(dirname(__FILE__));
$SESSION_CLOSED = False;

function end_session() {
    if (!$GLOBALS['SESSION_CLOSED']) {
        $session_file = $GLOBALS['HERE'] . '/' . $GLOBALS['_MYSESSID'] . '.session';
        file_put_contents($session_file, serialize($GLOBALS['_MYSESSION']));
        $GLOBALS['SESSION_CLOSED'] = True;
    }
}

function start_session() {
    if (array_key_exists('mysessid', $_COOKIE)) {
        $mysessid = $_COOKIE['mysessid'];
        $session_file = $GLOBALS['HERE'] . '/' . $mysessid . '.session';
        if (file_exists($session_file)) {
            $GLOBALS['_MYSESSION'] = unserialize(file_get_contents($session_file));
        }
        else {
            $GLOBALS['_MYSESSION'] = array();
        }
    }
    else {
        $mysessid = uniqid('MYSESSID');
        setcookie('mysessid', $mysessid);
        $GLOBALS['_MYSESSION'] = array();
    }
    $GLOBALS['_MYSESSID'] = $mysessid;
    register_shutdown_function('end_session');
}

Dan bagi setiap page yang ingin menggunakan fungsi session ini, contohnya index.php:-

<?php

include 'mysession.php';

start_session();
print_r($_MYSESSION);
$_MYSESSION['name'] = 'kamal';

Page yang kedua, index2.php:-

<?php

include 'mysession.php';

start_session();
print_r($_MYSESSION);
$_MYSESSION['on_index2'] = True;

Dalam contoh di atas, apabila pengguna melawat index2.php, data dalam $_MYSESSION['name'] yang disetkan pada laman pertama akan dipaparkan. Dalam function start_session(), apa yang berlaku adalah kita check jika pengguna mempunyai nilai cookie mysessid, jika ada kita akan cuba load data yang disimpan dalam file $mysessid.session ke dalam variable global $_MYSESSION. Manakala setiap kali script tersebut berakhir, kita akan simpan balik data dalam variable $_MYSESSION ke dalam file $mysessid.session. Ini adalah konsep asas bagaimana session berfungsi. Di sini kita menyimpan data di dalam file namun boleh saja data tersebut disimpan di dalam database table dengan mysessid berfungsi sebagai primary key bagi rekod tersebut.

Comments powered by Disqus

About me

Web developer in Malaysia. Currently work at MARIMORE Inc building internet services using Python and Django web framework.

ImportError is an error message emitted by Python when it failed to load certain module as requested by programmer. It's a very common error when someone new to the language trying it out. This website on the same theme, will try provide help for newcomers on any technologies to overcome their first hurdle.

Try most of the examples you may find here on Digital Ocean cloud service. They provide excellent VPS at a very cheaper price. Using this referral link you'll get USD10 credits upon sign up. That's enough to run single VPS with 1GB RAM for a month.

Others

I can also be found at the following sites:-

  • http://k4ml.blogspot.com/
  • http://k4ml.github.io/
  • http://metak4ml.blogspot.com/
  • http://www.mydev.my/
  • http://github.com/k4ml/

Disclaimers

The postings on this site are my own and don't necessarily represent my employer's positions, strategies or opinions.

Share