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".
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.