§Session ve Flash kapsamları
§Play’de farklı olan
Eğer birden fazla HTTP isteği arasında veriyi korumak isterseniz Session ya da Flash kapsamlarında saklayabilirsiniz. Session kapsamında saklanan veri tüm kullanıcı oturumu boyunca korunur. Flash kapsamında saklanan veriye ise yalnızca bir sonraki istek tarafından erişilebilir.
Session ve Flash verisinin sunucu tarafında saklanmadığını, aksine çerez mekanizması kullanılarak her bir HTTP isteğine eklendiğini anlamak önemlidir. Bu sebeple veri boyutu sınırlıdır (en fazla 4KB) ve yalnızca string değerler saklayabilirsiniz. Çerezin varsayılan adı PLAY_SESSION
’dır. application.conf içindeki session.cookieName
anahtarı ile bu değiştirilebilir.
Eğer çerezin adı değiştirilirse önceki çerez Çerezleri setlemek ya da silmek kısmında anlatılan yöntemle silinebilir.
Elbette çerez değerleri gizli bir anahtar ile imzalanır. Böylece istemci çerez verisini değiştiremez (aksi halde geçersiz olur).
Play Session bir önbellek gibi kullanılmak üzere tasarlanmamıştır. Belirli bir oturuma ait veriyi önbelleğe alma ihtiyacı duyarsanız Play’in dahili önbellek mekanizmasını kullanabilir ve veriyi kullanıcı ile ilişkilendirmek için kullanıcı Session’ında benzersiz bir ID saklayabilirsiniz.
Teknik olarak Session için bir zaman aşımı yoktur. Kullanıcı web tarayıcıyı kapattığında süresi dolar. Eğer zaman aşımı özelliğine ihtiyaç duyarsanız kullanıcı Session’ında bir zaman damgası saklayın ve bu bilgiyi ihtiyacınıza göre kullanın (ör. en çok oturum süresi, en çok eylemsizlik süresi, vb.)
§Session’da veri saklamak
Session yalnızca bir çerez olduğundan aslında bir HTTP başlığından ibarettir. Diğer yanıtların özelliklerini değiştirdiğiniz gibi session verisini de aynı yolla değiştirebilirsiniz.
Ok("Welcome!").withSession(
"connected" -> "[email protected]")
Bunun tüm oturum verisini değiştireceğine dikkat edin. Mevcut oturuma yeni bir eleman eklemek isterseniz gelen oturuma bir eleman ekleyin ve bunu yeni oturum olarak belirtin:
Ok("Hello World!").withSession(
request.session + ("saidHello" -> "yes"))
Aynı şekilde gelen oturumdan herhangi bir değeri çıkartabilirsiniz:
Ok("Theme reset!").withSession(
request.session - "theme")
§Bir Session değerini okumak
HTTP isteğinden gelen oturumu elde edebilirsiniz:
def index = Action { request =>
request.session.get("connected").map { user =>
Ok("Hello " + user)
}.getOrElse {
Unauthorized("Oops, you are not connected")
}
}
§Tüm oturumu verisini silmek
Tüm oturumu silen özel bir işlem bulunmaktadır:
Ok("Bye").withNewSession
§Flash kapsamı
Flash kapsamı tıpkı Session gibi çalışır fakat temel iki fark içerir:
- veri yalnız bir istek için saklanır
- Flash çerezi imzalanmaz. Bu sebeple kullanıcı çerezi değiştirebilir.
Önemli: Flash kapsamı yalnızca Ajax olmayan basit uygulamalarda başarı/hata durumlarını taşımak için kullanılmalıdır. Veri yalnızca bir sonraki istek için saklandığından ve karmaşık bir Web uygulamasında istek sırası için bir garanti olmadığından Flash kapsamı yarış durumlarına açıktır.
Aşağıda Flash kapsamını kullanan birkaç örnek yer alıyor:
def index = Action { implicit request =>
Ok {
request.flash.get("success").getOrElse("Welcome!")
}
}
def save = Action {
Redirect("/home").flashing(
"success" -> "The item has been created")
}
Görünüm katmanında Flash kapsamına erişmek için örtük bir Flash değeri ekleyin:
@()(implicit flash: Flash)
...
@flash.get("success").getOrElse("Welcome!")
...
Eğer ‘could not find implicit value for parameter flash: play.api.mvc.Flash’ şeklinde bir hata alırsanız Action bir request import etmemiş demektir. Aşağıdaki gibi bir “implicit request=>” ekleyin:
def index() = Action {
implicit request =>
Ok(views.html.Application.index())
}
Sonraki: Gövde ayrıştırıcılar
Dokümantasyonun bu çevirisi Play ekibi tarafından yapılmamaktadır. Eğer bir hata bulduysanız, bu sayfanın kaynak kodu burada bulunmaktadır. Dokümantasyon yönergelerini okuduktan sonra lütfen katkı yapmaktan çekinmeyin.