Menguak Kekuatan Superglobal PHP: SESSION, COOKIE, SERVER, dan Lainnya! (Part 11)

Rifqi An Rifqi An
Maret 05, 2026


Woy, para ksatria keyboard dan pawang bug PHP! Balik lagi nih di seri tutorial kesayangan kita, Belajar Dasar PHP (Part 11). Udah siap nerusin petualangan ngoding yang makin seru? Kalo di part sebelumnya kita udah akrab sama variabel-variabel lokal dan global, kali ini kita mau kenalan sama "liga super"-nya variabel di PHP. Mereka ini beneran sakti mandraguna, bisa diakses dari mana aja tanpa perlu ribet! Penasaran?

Pernah gak sih, pas lagi asyik ngoding PHP, kamu kepikiran: "Wah, gimana ya caranya si server tahu aku siapa? Kok tiba-tiba data keranjang belanjaku ada terus pas pindah halaman? Atau, kok bisa ya PHP tahu kita ngakses dari browser apa?" Nah, itu bukan sulap, bukan sihir, Bro/Sis! Itu adalah kekuatan super dari yang namanya Superglobal PHP!

Mereka ini adalah variabel-variabel khusus yang PHP sediain buat kita, isinya macem-macem data penting. Dari info server, data yang dikirim user, sampai data buat nginget-nginget user lintas halaman. Pokoknya, wajib banget kamu kenalan akrab sama mereka ini. Dijamin ngoding kamu bakal naik level!

Daftar Isi

Apa Itu Superglobal PHP?

Oke, biar gak bertele-tele, Superglobal itu adalah variabel bawaan PHP yang selalu tersedia di semua skrip, di scope manapun! Mau di dalam fungsi, di luar fungsi, di kelas, di mana aja, kamu bisa langsung panggil mereka tanpa perlu global keyword atau semacamnya.

Keren, kan? Makanya dibilang "super". Ibaratnya, mereka ini kayak superhero yang selalu sigap di manapun ada masalah (atau butuh data). Bentuknya selalu berupa array asosiatif, jadi nanti kita akses isinya pakai key-value.

$_SERVER: Si Mata-Mata Server

Ini nih superglobal yang isinya info-info tentang server web kita, lingkungan eksekusi skrip, sampai detail request dari browser. Pokoknya segala sesuatu yang berhubungan dengan "lingkungan" di mana skrip PHP kita jalan. Mau tahu IP pengunjung? Nama host server? Atau URL yang lagi diakses? $_SERVER jagonya!

Saking banyaknya info di dalamnya, kadang bikin puyeng juga. Tapi tenang, kita cuma perlu tahu yang penting-penting aja.

Contoh Penggunaan $_SERVER:


<?php
    echo "<h3>Info Server & Request (ngopi dulu, Bro!)</h3>";
    echo "<p><strong>Nama File Skrip:</strong> " . $_SERVER['PHP_SELF'] . "</p>";
    echo "<p><strong>Nama Host Server:</strong> " . $_SERVER['SERVER_NAME'] . "</p>";
    echo "<p><strong>Metode Request:</strong> " . $_SERVER['REQUEST_METHOD'] . "</p>";
    echo "<p><strong>Alamat IP Pengunjung:</strong> " . $_SERVER['REMOTE_ADDR'] . "</p>";
    echo "<p><strong>User Agent (Browser yang Dipakai):</strong> " . $_SERVER['HTTP_USER_AGENT'] . "</p>";
    
    // Untuk melihat semua isi $_SERVER (hati-hati, panjang banget!)
    // echo "<pre>";
    // print_r($_SERVER);
    // echo "</pre>";
?>

Coba deh jalanin kode di atas. Kamu bakal lihat info-info penting tentang koneksi yang lagi kamu pakai. Berguna banget buat debugging atau buat tahu siapa yang lagi "main-main" di website kita!

$_GET: Ambil Data dari URL (Si Paranoid)

Nah, kalo yang ini jagoannya ngambil data yang dikirim lewat URL. Kamu pasti sering liat kan URL yang ada tanda tanya (?) terus diikuti sama key=value&key2=value2? Itu namanya parameter URL, dan $_GET inilah yang bertugas mengambilnya.

Kenapa si Paranoid? Karena semua datanya kelihatan di URL, jadi jangan pernah kirim data sensitif lewat $_GET ya! Nanti bisa diintip orang lain.

Contoh Penggunaan $_GET:

Misalnya kamu punya link seperti ini: halaman.php?nama=Budi&umur=25

Untuk mengambil nilai "Budi" dan "25", kamu bisa pakai:


<?php
    // Cek dulu apakah parameter 'nama' dan 'umur' ada, biar gak error pas pertama kali diakses
    if (isset($_GET['nama']) && isset($_GET['umur'])) {
        $nama = $_GET['nama'];
        $umur = $_GET['umur'];
        echo "<p>Halo, <strong>" . htmlspecialchars($nama) . "</strong>! Usiamu <em>" . htmlspecialchars($umur) . "</em> tahun.</p>";
    } else {
        echo "<p>Silakan tambahkan parameter <em>nama</em> dan <em>umur</em> di URL (contoh: ?nama=Budi&umur=25)</p>";
    }
?>

Jangan lupa pakai htmlspecialchars() untuk mencegah XSS (Cross-Site Scripting) ya! Kebiasaan bagus nih biar aplikasi kamu aman dari ulah iseng!

$_POST: Data Rahasia dari Form (Si Penyimpan Rahasia)

Berbeda dengan $_GET, $_POST ini dipakai buat ngambil data yang dikirim dari form HTML dengan method="post". Data yang dikirim pakai POST ini gak muncul di URL, jadi lebih aman buat ngirim data-data sensitif kayak password, nomor kartu kredit, atau data pribadi lainnya.

Makanya dijuluki Si Penyimpan Rahasia. Lebih private gitu, kayak obrolan empat mata.

Contoh Penggunaan $_POST:

Pertama, kita butuh form HTML:


<!-- form.php -->
<h3>Form Login Sederhana (jangan serius-serius, ini contoh)</h3>
<form action="proses_login.php" method="post">
    <label for="username">Username:</label><br>
    <input type="text" id="username" name="username"><br><br>
    
    <label for="password">Password:</label><br>
    <input type="password" id="password" name="password"><br><br>
    
    <input type="submit" value="Login Kuy!">
</form>

Lalu, skrip PHP untuk memprosesnya (proses_login.php):


<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Pastikan ini beneran dari POST request
        $username = $_POST['username'];
        $password = $_POST['password'];

        echo "<h3>Hasil Proses Login</h3>";
        echo "<p>Username: <strong>" . htmlspecialchars($username) . "</strong></p>";
        echo "<p>Password: <em>(maaf, passwordnya rahasia, gak di-echo langsung)</em></p>";
        
        // Di aplikasi sungguhan, kamu bakal cek username & password ke database di sini
        if ($username == "admin" && $password == "rahasia") {
            echo "<p><strong>Login BERHASIL! Selamat datang, " . htmlspecialchars($username) . "!</strong></p>";
        } else {
            echo "<p><strong>Login GAGAL.</strong> Cek lagi username dan passwordmu.</p>";
        }

    } else {
        echo "<p>Akses halaman ini hanya via form POST.</p>";
    }
?>

Lagi-lagi, pakai htmlspecialchars() ya biar aman dari serangan XSS!

$_REQUEST: Si Serba Bisa (Tapi Hati-Hati!)

$_REQUEST itu semacam gabungan dari $_GET, $_POST, dan $_COOKIE. Dia bisa ngambil data dari ketiga sumber itu. Kedengarannya mantap kan, gak perlu pusing mikir dari mana datangnya data? TINGGAL COPAS! 😅

Tapi hati-hati! Karena dia ngumpulin dari berbagai sumber, urutannya bisa jadi masalah. Defaultnya, PHP akan memprioritaskan $_POST, lalu $_GET, lalu $_COOKIE. Kalau ada variabel dengan nama yang sama di $_GET dan $_POST, $_POST yang akan diambil. Ini bisa menyebabkan kebingungan dan celah keamanan kalau gak ditangani dengan benar.

Sebagai programmer yang baik dan benar, sebaiknya kita eksplisit aja pake $_GET atau $_POST sesuai kebutuhan. Jangan males! 😉

Contoh Penggunaan $_REQUEST:


<?php
    if (isset($_REQUEST['pesan'])) {
        echo "<p>Pesan dari <strong>$_REQUEST</strong>: " . htmlspecialchars($_REQUEST['pesan']) . "</p>";
    } else {
        echo "<p>Coba kirim parameter 'pesan' via GET atau POST.</p>";
    }
?>

$_SESSION: Si Ingatan Jangka Panjang (Penting Buat Login!)

Nah, ini dia salah satu superglobal paling penting buat bikin aplikasi web yang interaktif! $_SESSION itu ibarat ingatan jangka panjang server tentang seorang user. Data yang disimpan di session akan tetap ada selama user menjelajahi website kita, bahkan kalau dia pindah-pindah halaman.

Ini krusial banget buat sistem login, keranjang belanja, atau buat nyimpan preferensi user. Data session disimpan di sisi server, jadi lebih aman daripada cookie.

Penting! Sebelum bisa pake $_SESSION, kamu wajib panggil fungsi session_start(); di awal banget setiap skrip PHP yang mau berinteraksi dengan session. Kalo lupa, dijamin error atau datanya gak kesimpan!

Contoh Penggunaan $_SESSION:

Halaman 1 (login.php):


<?php
    session_start(); // Wajib di paling atas!

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $username = $_POST['username'];
        $password = $_POST['password'];

        // Contoh simulasi login
        if ($username === "programmer" && $password === "ngopi") {
            $_SESSION['username'] = $username;
            $_SESSION['loggedIn'] = true;
            echo "<p>Login BERHASIL! Redirect ke halaman profil...</p>";
            header("Location: profile.php"); // Arahkan ke halaman profil
            exit();
        } else {
            echo "<p style='color:red;'>Login GAGAL. Coba lagi.</p>";
        }
    }
?>
<h3>Halaman Login</h3>
<form action="login.php" method="post">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    <input type="submit" value="Masuk (lembur yuk!)">
</form>

Halaman 2 (profile.php):


<?php
    session_start(); // Wajib di paling atas!

    // Cek apakah user sudah login
    if (!isset($_SESSION['loggedIn']) || $_SESSION['loggedIn'] !== true) {
        echo "<p style='color:red;'>Kamu belum login, Bos! Balik ke <a href='login.php'>halaman login</a>.</p>";
        exit();
    }
?>
<h3>Halaman Profil Programmer</h3>
<p>Selamat datang, <strong><?php echo htmlspecialchars($_SESSION['username']); ?></strong>!</p>
<p>Ini adalah halaman khusus buat kamu yang udah berhasil login. Ngopi bareng yuk!</p>
<p><a href="logout.php">Logout</a></p>

Halaman 3 (logout.php):


<?php
    session_start(); // Wajib di paling atas!

    // Hapus semua variabel session
    session_unset();

    // Hancurkan session
    session_destroy();

    echo "<p>Kamu sudah logout dengan sukses! Sampai jumpa lagi, Bro/Sis.</p>";
    echo "<p><a href='login.php'>Login lagi</a></p>";
?>

Penting banget kan? Tanpa $_SESSION, setiap kali user pindah halaman, server bakal lupa dia siapa. Ribet banget kalau harus login terus setiap klik link!

Cookie itu ibarat "kue manis" yang dikirim server ke browser user, terus si browser nyimpen kue itu di komputernya. Nanti setiap kali user ngakses website yang sama, si browser akan otomatis ngirim balik kue itu ke server. Isinya bisa data-data kecil kayak preferensi bahasa, ID user (bukan password ya!), atau tracking iklan.

Bedanya sama session, cookie disimpan di sisi klien (browser user), bukan di server. Jadi, kalau user ngapus cookie-nya, datanya hilang. Juga, data di cookie bisa dilihat (tapi gak bisa diubah sembarangan) oleh user, jadi jangan pernah simpan data sensitif di sini!

Contoh Penggunaan $_COOKIE:

Untuk membuat cookie, kita pakai fungsi setcookie(). Fungsi ini harus dipanggil sebelum ada output HTML lainnya!


<?php
    // Set cookie, berlaku selama 1 jam (3600 detik)
    // Nama: 'nama_pengunjung', Nilai: 'Anak IT', Waktu kedaluwarsa: sekarang + 1 jam
    setcookie("nama_pengunjung", "Anak IT", time() + 3600, "/"); 
    
    // Atau set cookie untuk nginget tema favorit
    // setcookie("tema_favorit", "dark", time() + (86400 * 30), "/"); // 86400 detik = 1 hari, 30 hari
?>
<h3>Halaman Dengan Cookie</h3>
<?php
    if (isset($_COOKIE['nama_pengunjung'])) {
        echo "<p>Selamat datang kembali, <strong>" . htmlspecialchars($_COOKIE['nama_pengunjung']) . "</strong>!</p>";
    } else {
        echo "<p>Halo, pengunjung baru! Cookie 'nama_pengunjung' sudah dibuat.</p>";
    }

    // Untuk menghapus cookie, set waktu kedaluwarsa di masa lalu
    // setcookie("nama_pengunjung", "", time() - 3600);
?>
<p>Coba refresh halaman ini atau tutup browser lalu buka lagi. Kalau cookie-nya masih ada, kamu bakal tetap disapa.</p>

Keren kan? Kita bisa "mengingat" user tanpa harus login terus-terusan. Tapi ingat, gunakan dengan bijak dan jangan simpan data penting di cookie!

$_FILES: Si Penjaga File Upload

Superglobal ini khusus buat ngurusin file yang di-upload oleh user lewat form HTML. Kalau kamu bikin fitur upload gambar profil, dokumen, atau video, $_FILES inilah yang jadi kuncinya. Isinya nanti berupa informasi tentang file yang di-upload: nama file, tipe, ukuran, dan lokasi temporer file di server.

Kita akan bahas lebih detail tentang file upload di part lain, karena ini topiknya cukup kompleks dan butuh penanganan keamanan yang ekstra. Tapi setidaknya kamu tahu kalau ada $_FILES yang siap bantu!

$_GLOBALS dan $_ENV: Sekilas Info

  • $_GLOBALS: Ini adalah array asosiatif yang menyimpan semua variabel global yang tersedia saat ini. Kamu bisa mengakses variabel global dari mana saja menggunakan $GLOBALS['namaVariabel']. Tapi, jujur aja, jarang banget dipakai kecuali dalam kasus-kasus khusus atau kalau kamu copas kode lama yang memang pakai ini. Biasanya lebih enak pakai dependency injection atau struktur data yang lebih rapi.
  • $_ENV: Berisi variabel-variabel lingkungan (environment variables) dari server. Ini berguna banget kalau kamu mau ngambil konfigurasi yang gak mau hardcode di kode, misalnya kredensial database atau API Key. Tapi banyak developer lebih suka pakai file .env terpisah dan library seperti phpdotenv untuk manajemen environment variables yang lebih bersih.

Kapan Pakai yang Mana?

  • $_SERVER: Mau tahu info server, URL yang diakses, IP pengunjung, atau metode request? Pake ini.
  • $_GET: Mengambil data dari URL (parameter query). Cocok buat filter pencarian, ID artikel, navigasi. Jangan untuk data sensitif.
  • $_POST: Mengambil data dari form HTML (method="post"). Cocok buat login, registrasi, kirim komentar. Aman untuk data sensitif (tapi tetap harus divalidasi dan dienkripsi saat disimpan!).
  • $_SESSION: Menyimpan data user di server lintas halaman. Penting buat sistem login, keranjang belanja, atau state aplikasi. Data aman di sisi server.
  • $_COOKIE: Menyimpan data kecil di browser user. Buat mengingat preferensi user, tracking, atau "remember me" login (tapi biasanya cuma ID, bukan password). Data kurang aman, bisa dilihat user.
  • $_FILES: Untuk menangani file yang di-upload dari form.
  • $_REQUEST: Gabungan GET, POST, dan COOKIE. Hindari kalau bisa, lebih baik spesifik.

Latihan: Studi Kasus Kucing dan Superglobal

Si Meong, kucing kesayangan kita, punya website untuk nge-share foto-foto imutnya. Dia pengen website-nya bisa:

  1. Menampilkan nama pengunjung yang disapa pertama kali.
  2. Mengingat nama pengunjung itu selama dia menjelajahi website (tanpa login, anggap saja sapaan personal).
  3. Pengunjung bisa "vote" untuk foto kucing favoritnya (misal, foto dengan ID 123).
  4. Ada halaman khusus "Profil Meong" yang cuma bisa diakses kalau user sudah di-"sapa" sebelumnya.
  5. Di halaman "Profil Meong", dia bisa melihat browser apa yang dipakai pengunjungnya.

Yuk, kita bantu si Meong pakai kekuatan Superglobal PHP! Buat 3 file PHP:

  1. index.php:
    • Kalau ada parameter nama di URL (misal: index.php?nama=Budi), simpan nama itu ke dalam session.
    • Sapa pengunjung dengan nama yang ada di session.
    • Kalau belum ada nama, minta pengunjung untuk memasukkan namanya via URL.
    • Tampilkan link ke halaman foto_meong.php?id=123 (ini buat contoh vote).
    • Tampilkan link ke profil_meong.php.
  2. foto_meong.php:
    • Pastikan session sudah dimulai.
    • Ambil ID foto dari URL menggunakan $_GET.
    • Sapa pengunjung dengan nama yang ada di session.
    • Tampilkan pesan "Kamu sedang melihat foto kucing dengan ID: [ID Foto]".
    • Tambahkan link "Kembali ke Beranda" (index.php).
  3. profil_meong.php:
    • Pastikan session sudah dimulai.
    • Cek apakah ada nama pengunjung di session. Kalau belum ada, redirect ke index.php atau tampilkan pesan "Harap sapa Meong dulu di beranda!".
    • Sapa pengunjung dengan nama yang ada di session.
    • Tampilkan browser apa yang digunakan pengunjung saat ini menggunakan $_SERVER.
    • Tambahkan link "Lupakan Aku, Meong!" yang menghapus session dan mengarahkan kembali ke index.php.

Selamat ngoding! Kalau ada bug, jangan panik, mungkin si Meong lagi joget di keyboard-mu. Semangat, Bro/Sis! Lanjut di part berikutnya ya!

Jangan lupa untuk selalu sanitasi dan validasi semua input dari user. Keamanan itu nomor satu!

Bagikan Artikel Ini