[Solving] PHP: Error session_start() : Cannot send session cookie
Judulnya gitu, gak nemu judul yang pas. Ceritanya begini, hari Kamis kemarin, sebelum presentasi tugas akhir Mata Kuliah Pemrograman Web, banyak teman-teman yang mengeluh page PHP yang dibuatnya error (galat), saya bantu cek output error-nya, dan 5 dari 5 teman saya mengalami error yang sama, dengan log output yang sama, yaitu Warning: session_start(): Cannot send session cookie - headers already sent by (output started at blablabla.php:bla) in blablabla.php on line blablabla
. Ini pasti urusan session lagi.
1. Mencari Masalah
Mencari masalah di sini bukanlah ngajakin ribut sama temen sebelah atau asdos atau bahkan dosen, tapi membaca log di mana terjadi error. Yang saya suka dari PHP adalah log yang ditampilkan cukup lengkap dari mulai lokasi berkas kode hingga lokasi baris kode yang salah, ya, dibandingkan dengan angular JS :p
Kita cari file apa dan di baris berapa kode tersebut mengeluarkan error, cek apakah closing tag (karakter ; ) sudah benar tempatnya, cek juga curly braces ({ / }), atau bracket ([ / ]) sudah benar pada tempatnya, cek apapun itu yang akan mempengaruhi kesalahan kode termasuk variable. Jika semua sudah sesuai pada tempatnya, yang terakhir cek apakah session_start();
berada di baris paling awal sebuah halaman?
2. Memecahkan Masalah
Masalah bukan untuk dilupakan apalagi ditinggalkan, masalah adalah sesuatu yang harus dipecahkan dan diselesaikan, setuju? Sebelum mulai memecahkan masalah, mari kita mengenal aturan dari pengetikan kode PHP dan penempatan session_start();
2.1 Aturan Singkat Pengetikan Kode PHP
- PHP adalah pemrograman server side, semua kode yang kita ketik akan diproses di PHP server lalu dikirimkan kembali ke peramban (browser) untuk ditampilkan di layar. PHP sendiri bisa dikombinasikan dengan tag HTML dan CSS di dalam berkas kerja sehingga mempermudah pekerjaan untuk web programmer, bayangkan jika tidak?
- Setiap kode (script / code) PHP diawali dengan
<?php
dan diakhir dengan?>
, tetapi sebelum mengerjakan anda bisa membaca basmallah dan mengakhiri pekerjaan dengan hamdallah, itu lebih baik. Jika anda mendapatkan contoh code dari internet, pastikan mengganti<?
ke<?php
. - Apa yang tidak ditulis dalam tag
<?php
...?>
akan diproses dan ditampilkan kembali sebagai HTML, termasuk spasi dan tab.
Sekian aturan PHP yang menurut saya cukup untuk menyelesaikan masalah ini dari studi kasus kemarin. Selanjutnya adalah mengenal bagaimana menempatkan session_start();
yang baik dan benar.
2.2 Aturan Singkat Penempatan session_start();
session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie.
Begitulah menurut penjelasan dari dokumentasi PHP. Artinya apa? Ayolah, masa harus diterjemahin juga?
session_start();
harus ditempatkan di baris paling awal sebuah halaman, bukan baris awal berkas kode, jadi jika anda menggunakan metode include berkas untuk menampilkan bagian dari halaman, tempatkansession_start();
sebelum file HTML anda dimulai, misal di filehead.php
Contoh salah:Ini file PHP Selamat Datang
Contoh yang benar:
Ini file PHP Selamat Datang
- Karena aturan singkat PHP di atas tadi menyatakan bahwa setiap sesuatu yang di luar tag
akan diproses sebagai HTML dan
session_start();
tidak boleh ada yang mendahului, artinyasession_start();
harus selalu dieksekusi atau diproses pertama kali sebelum code / elemen lainnya, pastikan tidak ada spasi atau tab sebelum tag
Contoh salah:Contoh benar:
Sekian aturan singkat mengenai session_start();
, kesimpulannya adalah, bahwa session_start();
tidak boleh didahului oleh apapun saat diproses, termasuk oleh spasi dari HTML. Semoga post yang tidak singkat ini mudah dipahami dan dimengerti.
Selamat debugging dan jangan sungkan untuk bertanya.