Javasessionflash - opensas/Play20Es GitHub Wiki
Esta página todavía no ha sido revisada su traducción al castellano. Puedes ayudarnos con la tarea simplemente presionando el botón
Edit Page. Para más información puedes leer esta guía para el traductor. Aquí puedes ver cuánto nos falta para terminar la traducción.
Si usted debe mantener información entre peticiones HTTP, puede almacenarla en el contexto (Scope) de Sesión o el contexto Flash. La información almacenada en la sesión esta disponible durante toda la sesión de usuario, y la información almacenada en el contexto Flash solo está disponible para la siguiente petición.
Es importante entender que los datos de Sesión y Flash no son almacenados en el servidor sino agregados a la siguiente petición HTTP mediante Cookies. Esto significa que el tamaño máximo de la información es muy limitado (hasta 4KB) y que solo pueden almacenarse valores tipo String.
Las Cookies son firmadas con una llave secreta para que el cliente no pueda modificar la información (o será invalidada). La sesión en Play no esta hecha para ser usada como Cache. Si usted necesita guardar en cache información asociada a una sesión especifica, puede usar el mecanismo de Cache ofrecido por Play y almacenar un ID único en la sesión de usuario para asociar la información en cache con un usuario específico.
No existe un Timeout para la sesión, que expira cuando el usuario cierra el Browser. Si usted necesita un Timeout funcional para una aplicación particular, almacene un Timestamp en la sesión de usuario y úselo de la manera que requiera su aplicación (ej. duración máxima de la sesión, máximo tiempo de inactividad, etc).
Usted puede recuperar la sesión a partir de una petición HTTP:
public static Result index() {
String user = session("connected");
if(user != null) {
return ok("Hello " + user);
} else {
return unauthorized("Oops, you are not connected");
}
}
Debido a que la sesión es solo una Cookie, es también solo un encabezado HTTP, pero Play proporciona un método utilitario para almacenar un valor en sesión:
public static Result index() {
session("connected", "[email protected]");
return ok("Welcome!");
}
De la misma manera, puede eliminar cualquier valor de la sesión actual:
public static Result index() {
session.remove("connected");
return ok("Bye");
}
Si usted quiere descartar toda la sesión, existe una operación especial:
public static Result index() {
session().clear();
return ok("Bye");
}
El contexto Flash funciona exactamente igual que la sesión, pero con dos diferencias:
- la información se mantiene solo durante una petición
- La Cookie Flash no está firmada, haciendo posible que el usuario la modifique.
Importante: El contexto Flash solo debe ser usado para transportar mensajes de éxito/error en aplicaciones simples no-Ajax. Como la información solo se mantiene durante la siguiente petición y ya que no hay forma de garantizar el orden de peticiones en una aplicación Web compleja, el contexto Flash está sujeto a condiciones de carrera (race conditions).
Algunos ejemplos usando el contexto Flash:
public static Result index() {
String message = flash("success");
if(message == null) {
message = "Welcome!";
}
return ok(message);
}
public static Result save() {
flash("success", "The item has been created");
return redirect("/home");
}
Siguiente: Body parsers