Study
Play Framework

Session & Flash Scope

Penjelasan

Session di Play disimpan sebagai cookie di sisi klien (bukan server-side storage), berisi data key-value sederhana seperti ID user yang sedang login. Karena disimpan di cookie, session punya batas ukuran kecil dan datanya bisa dibaca klien (walau ditandatangani agar tidak bisa dipalsukan) — jadi jangan simpan data sensitif di dalamnya. Session diakses lewat `request.session` untuk membaca dan `Result.withSession(...)` untuk menulis/mengganti. Flash scope mirip session tapi berumur sangat pendek — data yang disimpan di flash hanya bertahan untuk SATU request berikutnya setelah redirect, lalu otomatis hilang. Ini cocok untuk pola "redirect setelah submit form dengan pesan sukses/error" (Post-Redirect-Get), di mana pesan perlu tampil sekali di halaman hasil redirect tanpa nempel permanen.

Contoh Konsep

import play.api.mvc._

def login(): Action[AnyContent] = Action {
  Ok("Login berhasil").withSession("userId" -> "42")
}

def profil(): Action[AnyContent] = Action { request =>
  request.session.get("userId") match {
    case Some(id) => Ok(s"Profil user id=$id")
    case None => Unauthorized("Silakan login dulu")
  }
}

def simpanData(): Action[AnyContent] = Action {
  Redirect("/hasil").flashing("pesan" -> "Data berhasil disimpan")
}

Praktikum

Buat Action logout() yang menghapus session (withNewSession) lalu redirect ke halaman "/" dengan pesan flash "Anda telah logout".

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Jangan simpan data besar atau sensitif (seperti password) di session — karena tersimpan di cookie klien, cukup simpan identifier kecil seperti user ID lalu ambil detailnya dari database saat dibutuhkan.