11
votes

Comment stocker Objet (Not String) dans la session dans le cadre de jeu?

J'ai un projet pour l'école et je dois utiliser Java. Récemment, j'ai trouvé un cadre de jeu et je veux essayer de l'utiliser. C'est assez facile pour un démarrage rapide, mais j'ai rencontré un problème avec la session.

étant apatride par sa nature, la lecture envoie une session complète à l'utilisateur dans le cookie et la reçoit sur la demande suivante. Il ne permet donc que de la quantité limitée de données en session.

Ce que je veux faire, c'est chercher à récupérer l'objet utilisateur à partir de DB sur la connexion de l'utilisateur et de le conserver dans la session, de sorte que je puisse y accéder à des modèles, etc. (j'ai des méthodes de classe d'utilisateurs que je dois appeler dans l'ordre Pour personnaliser l'interface utilisateur), mais si je mettez l'objet utilisateur, jouer appelle sa méthode de totrage et met qu'en session.

J'ai trouvé que la méthode recommandée est de mettre une quantité de données plus grande dans le cache, mais je ne sais pas comment y accéder à partir du modèle (je suppose que je pourrais faire une méthode avec @Bont Annotation et ajouter l'utilisateur à Renderargs, mais cela fait ne semble pas très propre pour moi). Un autre problème est que le cache a une durée de vie limitée, alors mon objet peut disparaître.

Quelqu'un a-t-il de l'expérience avec ce type de problèmes?

Y a-t-il un moyen d'utiliser la session latérale du serveur avec jouer? Je n'ai pas besoin de fonctionnalité de repos pour ce projet, de même que je suis concerné, l'application peut sauver l'état ...


0 commentaires

3 Réponses :


4
votes

Utilisez la sérialisation Java pour sérialiser un hashmap à un fichier ou à la base de données. Nommez la colonne Fichier ou ID après un identifiant unique que vous stockez dans le cookie de l'utilisateur. Ensuite, mettez l'objet utilisateur dans le hashmap avant de sérialiser le hashmap. Maintenant, vous avez un magasin persistant que vous pouvez accéder. Lorsque le cadre oublie l'objet utilisateur ou toute autre information de session, vous pouvez désérialiser le hashmap. Ensuite, écrivez des méthodes d'aide statique, Static Object SessionDb.get (ID de chaîne, clé de chaîne) et SessionDB.UT (ID de chaîne, clé de chaîne, valeur d'objet). J'utilise cette méthode sur mon cadre fait maison pour stocker des informations de session sur une petite ferme serveur. Bien sûr, j'utilise la base de données, pas un système de fichiers.


0 commentaires

2
votes

Je pense que vous devriez avoir un coup d'oeil à

http://groups.google.com/group/play-framework/browse_thread/thread/3D6946AD0B00303B/188E1B272D91408D?lnk=gst&q=store+Object+in+Session#188E1B272D91408D

Vous pouvez également rechercher ici

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

La liste de discussion de jeu de jeu sur Google Groupes est très active et vous obtenez généralement une réponse dans quelques jours, au plus ...


0 commentaires

1
votes

Une autre option consiste à convertir vos objets en JSON. J'ai créé un util simple pour cela et utilisé Flexjson pour sérialiser mes objets dans 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);
    }

}


0 commentaires