PHP: Kembali ke Halaman yang Terakhir Dibuka Setelah Login

Tulisan ini merupakan terjemahan bahasa Indonesia dari tulisan yang pernah aku tulis di blog A Jar of Minds.

Biasanya kita melihat banyak situs yang mana ketika kita melakukan proses login, situs tersebut akan membawa kita ke halaman depan atau halaman akun apabila login sukses. Namun terkadang kita juga menjumpai beberapa situs (seperti YouTube misalnya) mengarahkan penggunanya ke halaman sebelumnya, yaitu halaman yang terakhir dibuka setelah login berhasil. Teknik ini sangat bermanfaat bagi pengunjung agar tidak kehilangan jejak, khususnya untuk situs interaktif. Misalnya e-commerce di mana pengguna diminta untuk login dulu saat melakukan check-out. Setelah login pengguna akan dibawa kembali ke halaman tahap check-out terakhir. Atau situs media sosial di mana pengguna diminta untuk login dulu sebelum bisa menulis komentar. Setelah login pegguna akan dibawa kembali ke halaman yang ingin dikomentari tersebut.

Ide dasarnya sederhana. Ketika pengguna diarahkan ke halaman login, halaman tersebut mencari tahu URL dari mana pengguna tersebut datang (pada PHP hal ini bisa dilakukan dengan membaca variabel $_SERVER['HTTP_REFERER']). Informasi yang diperoleh kemudian dikirimkan bersamaan dengan username dan password yang dikirim oleh pengguna. Sehingga apabila login berhasil, situs sudah tahu ke mana pengguna bisa diarahkan dari URL referer tersebut.

Oke mari kita coba saja!

1. Buat Beberapa Halaman

Pada tutorial ini kita akan membuat situs yang terdiri dari dua halaman contoh. Pengguna bisa mengakses kedua halaman ini. Mari buat halaman pertama:

index.php

<php
// Check session state
session_start();
if($_SESSION['is_logged_in'] == true)
    $logged_in = true;
else
    $logged_in = false;
?>
<h1>Ini Halaman Pertama</h1>
<a href="page2.php">Menuju halaman kedua</a>
<?php if($logged_in) : ?>
    <p>Anda sudah masuk.</p>
    <a href="logout.php">Klik sini untuk keluar</a>
<?php else : ?>
    <a href="login.php">Klik sini untuk masuk</a>
<?php endif; ?>

Catatan: Untuk menyederhanakan kode, baris kode di atas bukan merupakan dokumen HTML yang valid. Apabila membuat halaman sebenarnya, kamu harus lengkapi dengan tag HTML, HEAD, dan BODY dengan benar.

Kita punya dua tautan: login dan logout. Masing-masing akan ditampilkan menurut kondisi login pengguna. Jika pengguna sudah masuk, variabel $_SESSION['is_logged_in'] bernilai TRUE. Variabel session ini akan dijabarkan belakangan.

Berikutnya kita buat satu halaman lagi mirip seperti yang pertama. Kamu bisa juga copy-paste dari halaman pertama lalu ubah saja judulnya.

page2.php

<php
// Check session state
session_start();
if($_SESSION['is_logged_in'] == true)
    $logged_in = true;
else
    $logged_in = false;  
?>
<h1>Ini Halaman Kedua</h1>
<a href="index.php">Menuju halaman pertama</a>
<?php if($logged_in) : ?>
    <p>Anda sudah masuk.</p>
    <a href="logout.php">Klik sini untuk keluar</a>
<?php else : ?>
    <a href="login.php">Klik sini untuk masuk</a>
<?php endif; ?>

2. Halaman Login

Kita lihat bahwa jika kita klik tautan “Klik sini untuk masuk”, maka kita akan dibawa ke halaman login.php. Sekarang kita buat halaman login sederhana hanya dengan isian username dan password saja. Tapi sebelumnya, kita cek dulu dan dapatkan URL dari mana pengguna datang, lalu set ke dalam variabel $redirect_to. Kita bisa peroleh informasi ini dari $_SERVER['HTTP_REFERER'].

login.php

<?php
// Get the refering page (if unset)
if(!isset($redirect_to))
    $redirect_to = $_SERVER['HTTP_REFERER'];
?>

Oke, ini dia halaman login-nya:

<h1>Login</h1>

<form action="login_submit.php" method="POST">
    <label>
        Username:<br />
        <input type="text" name="username" value="<?=@$username?>" /><br />
    </label>
    <label>
        Password:<br />
        <input type="password" name="password" /><br />
    </label>
    <input type="submit" value="Login" />
    <input type="hidden" name="redirect_to" value="<?=$redirect_to?>" />
</form>

<p><?=@$error?></p>

Di dalam form kita tambahkan hidden input dengan nama “redirect_to” untuk mengirimkan URL yang sudah kita peroleh tadi ke halaman login_submit.php yang akan memproses login ini.

Catatan: Kalau kamu masih pemula dalam bahasa pemrograman PHP, kamu mungkin menyadari aku menulis <?=$redirect_to?> sebagai nilai dari hidden input. Itu adalah kependekan dari <?php echo $redirect_to; ?>. Selain itu ada juga tanda @ yang bisa ditambahkan sebelum nama variabel untuk menyembunyikan pesan error kalau variabel yang digunakan ternyata belum di-set.

3. Proses Login

Ketika pengguna menekan tombol Login, maka semua data di atas dikirim ke halaman login_submit.php. Pada halaman ini, kita akan memeriksa kebenaran isian username dan password. Jika cocok maka login berhasil dan kita bisa kembali ke halaman sebelumnya. Kalau tidak, maka halaman login ditampilkan kembali dengan pesan error.

Untuk contoh ini kita hanya akan cocokkan username dan password-nya harus “admin”.

login_submit.php

<?php
// Get form inputs
$username = $_POST['username'];
$password = $_POST['password'];
$redirect_to = $_POST['redirect_to'];

// Check login credentials
if($username == 'admin' && $password == 'admin') {
    // Success
    session_start();
    $_SESSION['is_logged_in'] = true;

    // If the last page is known, redirect to last page,
    // otherwise go to home page.
    if($redirect_to != '')
        header('Location: '.$redirect_to);
    else
        header('Location: index.php');
}
else {
    // When failure, reload the login form
    $error = "Invalid username/password";
    include('login.php');
}
?>

Ada kalanya $_SERVER['HTTP_REFERER'] (atau variabel $redirect_to dalam hal ini) tidak berisikan data apapun. Kasus ini bisa terjadi apabila pengguna membuka halaman login langsung dengan mengetikkan URL di address bar, misalnya. Jadi kita masih harus memeriksa apabila $redirect_to kosong, kita arahkan ke halaman depan saja.

4. Bonus: Logout

Sejauh ini, tutorial login kita sudah selesai. Tapi rasanya belum lengkap kalau tidak ada halaman logout-nya. Jadi ini dia kode bonus untuk halaman logout.php.

logout.php

<?php
// Get the refering page
$redirect_to = $_SERVER['HTTP_REFERER'];

// Destroy session (logout)
session_start();
session_destroy();

// If the last page is known, redirect to last page,
// otherwise go to home page.
if($redirect_to != '')
    header('Location: '.$redirect_to);
else
    header('Location: index.php');
?>

Cara termudah melakukan logout adalah dengan membuang sesi seluruhnya, jadi data dalam $_SESSION akan terhapus.

Saat user logout, kita juga mungkin ingin mereka bisa kembali ke halaman yang terakhir dikunjungi. Oleh karena itu di sini kita juga mengecek variabel $redirect_to. Caranya sama persis dengan kode di login_submit.php.

Semoga bermanfaat! 🙂

Tulis Komentar