Question

Comment puis-je enregistrer une session objet d'instance foreach utilisateur?

J'ai une classe pour la modélisation d'un algorithme complexe. Cet algorithme est conçu pour fonctionner étape par étape. Je dois instancier des objets de cette classe pour chaque utilisateur. Chaque utilisateur doit être en mesure d'avancer pas à pas leur instance.

Était-ce utile?

La solution

Vous ne pouvez stocker les objets dans le cache. Les objets doivent être sérialisable pour cela. Lors de la session, vous pouvez stocker une clé (qui doit être une chaîne) dans le cache. Assurez-vous que votre code fonctionne toujours si l'objet a été retiré du cache (comme un délai d'attente de session). Il est expliqué dans http://www.playframework.org/documentation/1.0.3/cache . Espoir que résoudre votre problème.

Autres conseils

Pour stocker des valeurs de la session:

//first get the user's session
//if your class extends play.mvc.Controller you can access directly to the session object
Session session = Scope.Session.current();
//to store values into the session
session.put("name", object);

Si vous voulez annuler / effacer l'objet de la session

session.clear()

de la documentation de jeu: http://www.playframework.org/documentation/1.1. 1 / cache

Play has a cache library and will use Memcached when used in a distributed environment.

If you don’t configure Memcached, Play will use a standalone cache that stores data in the JVM heap. Caching data in the JVM application breaks the “share nothing” assumption made by Play: you can’t run your application on several servers, and expect the application to behave consistently. Each application instance will have a different copy of the data.

Vous pouvez mettre un objet dans le cache, comme dans l'exemple suivant (dans cet exemple de la doc http://www.playframework.org/documentation/1.1.1/controllers#session , vous utilisez session.getId () pour enregistrer les messages pour chaque utilisateur)

public static void index() {
    List messages = Cache.get(session.getId() + "-messages", List.class);
    if(messages == null) {
        // Cache miss
        messages = Message.findByUser(session.get("user"));
        Cache.set(session.getId() + "-messages", messages, "30mn");
    }
    render(messages);
}

Parce qu'il est un cache, et non une session, vous devez prendre en compte que les données ne peuvent plus être disponibles, et ont une moyenne pour le récupérer une fois de plus somehere (le modèle de message, dans ce cas)

Quoi qu'il en soit, si vous avez assez de mémoire et il implique une courte interaction avec l'utilisateur les données doivent être là, et dans le cas où ce n'est pas, vous pouvez rediriger l'utilisateur vers le début de l'assistant (vous parlez d'une sorte d'assistant la page, à droite?)

Avoir à l'esprit que le jeu, avec son approche part rien sans état, ont vraiment pas SéANCe du tout, au-dessous il gère simplement par les cookies, c'est pourquoi il ne peut accepter que des chaînes de taille limitée

Voici comment vous pouvez enregistrer des « objets » dans une session. Fondamentalement, vous linéariser / objets délinéariser à JSON et de le stocker dans le cookie.

https://stackoverflow.com/a/12032315/82976

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top