Frage

Ich habe ein Projekt für die Schule und muss Java benutzen. Kürzlich habe ich ein Spielrahmen gefunden und möchte versuchen, es zu verwenden. Es ist einfach genug für einen kurzen Start, aber ich stieß auf ein Problem mit der Sitzung.

Das Spielen sendet nach staatenlos, sendet die gesamte Sitzung an den Benutzer in Cookie und empfängt es bei der nächsten Anfrage, sodass nur eine begrenzte Menge an Daten in der Sitzung ermöglicht.

Ich möchte das Benutzerobjekt von DB auf der Benutzeranmeldung abrufen und es in der Sitzung aufbewahren, damit ich aus den Vorlagen usw. darauf zugreifen kann (ich habe einige Methoden in der Benutzerklasse, die ich anrufen muss, um die Benutzeroberfläche anzupassen ), aber wenn ich Benutzerobjekt einsetzt, rufe Anrufe auf seine TOString -Methode ab und setzt diese in Sitzung ein.

Ich fand heraus für mich sauber). Ein weiteres Problem ist, dass Cache eine begrenzte Lebensdauer hat, sodass mein Objekt verschwinden kann.

Hat jemand Erfahrung mit solchen Problemen?

Gibt es eine Möglichkeit, Server -Seitensitzung mit Spiel zu verwenden? Ich brauche keine Ruhefunktionalität für dieses Projekt. Für mich kann die Anwendung also den Zustand speichern ...

War es hilfreich?

Lösung

Verwenden Sie die Java -Serialisierung, um eine HashMap in eine Datei oder in die Datenbank zu serialisieren. Nennen Sie die Datei- oder ID -Spalte nach einer eindeutigen Kennung, die Sie im Keks des Benutzers speichern. Legen Sie dann das Benutzerobjekt in die HashMap ein, bevor Sie den HashMap serialisieren. Jetzt haben Sie ein hartnäckiges Geschäft, auf den Sie zugreifen können. Wenn das Framework das Benutzerobjekt oder andere Sitzungsinformationen vergisst, können Sie das HashMap deserialisieren. Schreiben Sie dann einige statische Helfermethoden, statische Objekt -SessionDB.get (String -ID, String -Taste) und SessionDB.put (String -ID, String -Schlüssel, Objektwert). Ich verwende diese Methode in meinem hausgemachten Framework, um Sitzungsinformationen über eine kleine Serverfarm zu speichern. Natürlich verwende ich die Datenbank, kein Dateisystem.

Andere Tipps

Ich denke, Sie sollten sich ansehen

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

Sie können auch hier suchen

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

Die Play Framework -Diskussionsliste bei Google Groups ist sehr aktiv und Sie erhalten normalerweise in ein paar Tagen eine Antwort, höchstens ...

Eine andere Möglichkeit besteht darin, Ihre Objekte in JSON umzuwandeln. Ich habe einen einfachen Gebrauch dafür erstellt und Flexjson verwendet, um meine Objekte in JSON zu serialisieren.

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);
    }

}

Hinweis: Sie müssen nach Ihrer Arbeit die Reinigung verwalten und beachten, dass dies nicht so sicher ist, da dies im Cookie gespeichert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top