Pregunta

tengo un proyecto para la escuela y tengo que utilizar Java. Recientemente me encontré con marco de juego y quiero tratar de usarlo. Es bastante fácil para un comienzo rápido, pero me encontré con un problema con la sesión.

Ser apátrida, por su naturaleza, el juego envía toda la sesión de usuario en cookies y lo recibe en la siguiente petición, por lo que sólo permite cantidad limitada de datos en la sesión.

Lo que quiero hacer es ir a buscar el objeto Usuario de DB en la conexión del usuario, y mantenerlo en sesión, por lo que podía acceder a ella a partir de plantillas y así sucesivamente (tengo algunos métodos en la clase de usuario que tengo que llamar con el fin para personalizar la interfaz de usuario), pero si pongo objeto usuario, juego llama a su método toString y pone que en la sesión.

He descubierto que forma recomendada es poner mayor cantidad de datos en caché, pero no sé cómo acceder a él desde la plantilla (supongo que podría hacer con el método @Before anotación y añadir usuarios a renderArgs, pero eso no parece muy limpio para mí). Otro problema es que la caché ha limitada de por vida, por lo que mi objeto puede desaparecer.

¿Alguien tiene experiencia con este tipo de problemas?

¿Hay alguna manera de utilizar la sesión del lado del servidor con el juego? No necesito funcionalidad REST para este proyecto, por lo que, en lo que a mí respecta, la aplicación puede guardar el estado ...

¿Fue útil?

Solución

El uso de Java La serialización para serializar un Hashmap a un archivo o en la base de datos. El nombre del archivo o columna ID después de un identificador único que almacena en la cookie del usuario. A continuación, poner el objeto de usuario en el mapa hash antes de serializar el HashMap. Ahora usted tiene un almacén persistente que puede acceder. Cuando el marco olvida el objeto Usuario o cualquier otra información de la sesión, puede deserializar el Hashmap. A continuación, escriba algunos métodos auxiliares estáticos, objeto estático SessionDB.get (String id, String key) y SessionDB.put (String id, String key, valor del objeto). Yo uso este método en mi marco hecho en casa para almacenar información de sesión a través de una granja de servidores pequeña. Por supuesto que utilizo la base de datos, no un sistema de archivos.

Otros consejos

Creo que deberías echar un vistazo a

http://groups.google.com/group/play-framework/browse_thread/thread/3d6946ad0b00303b/188e1b272d91408d?lnk=gst&q=store+object+in+session#188e1b272d91408d

También puede buscar

http://groups.google.com/group/play-framework

la lista de discusión marco juego en grupos de Google es muy activo, y por lo general obtener una respuesta en un par de días, a lo sumo ...

Otra opción es la de convertir los objetos en JSON. He creado un simple Util para esto y solía Flexjson a serializar mis objetos en JSON.

import play.Logger;
import play.mvc.Http;
import play.mvc.Http.Session;
import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;

public class SessionManager {

private static JSONSerializer s = new JSONSerializer();

    public static void addSession(String key, Object value) {

        if(value != null) {
            Session session = Http.Context.current().session();
            session.put(key, s.deepSerialize(value));
        } else {
            Logger.info("Value for " + key + " is null");
        }
    }

    public static <T> T get(String key) {

        Session session = Http.Context.current().session();
        final String value = session.get(key);

        if (value == null) {
            return null;
        }

        return new JSONDeserializer<T>().deserialize(value);
    }

}

NOTA: Vas a tener que gestionar la limpieza de su trabajo y después de tener en cuenta que, dado que esta se almacena en la cookie, no es tan segura

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top