Domanda

Come posso conservare una sessione oggetto istanza utente foreach

Ho una classe per modellare un complesso algoritmo. Questo algoritmo è progettato per eseguire passo-passo. Ho bisogno di creare un'istanza di oggetti di questa classe per ogni utente. Ciascun utente dovrebbe essere in grado di avanzare passo a passo il loro esempio.

È stato utile?

Soluzione

È possibile memorizzare solo gli oggetti nella cache. Gli oggetti devono essere serializzabile per questo. Nella sessione è possibile memorizzare un tasto (che deve essere una stringa) per la cache. Assicurarsi che il codice funziona ancora se l'oggetto è stato rimosso dalla cache (lo stesso di una sessione-timeout). E 'spiegato in http://www.playframework.org/documentation/1.0.3/cache . La speranza che risolvere il problema.

Altri suggerimenti

Per memorizzare i valori nella sessione:

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

Se si vuole invalidare / cancellare l'oggetto di sessione

session.clear()

dalla documentazione gioco: 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.

Si può mettere qualsiasi oggetto nella cache, come nel seguente esempio (in questo esempio dal doc http://www.playframework.org/documentation/1.1.1/controllers#session , si utilizza session.getId () per salvare i messaggi per ogni utente)

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

Perché è una cache, e non una sessione, si deve prendere in considerazione che i dati potrebbero non essere più disponibile, e avere qualche mezzo per recuperare ancora una volta dal somehere (il modello del messaggio, in questo caso)

In ogni caso, se si dispone di memoria sufficiente e si tratta di una breve interazione con l'utente i dati dovrebbero essere lì, e nel caso in cui non è possibile reindirizzare l'utente all'inizio della procedura guidata (si sta parlando di un qualche tipo di procedura guidata pagina, giusto?)

avere in mente che il gioco, con il suo approccio senza stato share-niente, in realtà non hanno alcuna sessione a tutti, sotto di essa solo gestisce attraverso i cookie, è per questo che può accettare solo stringhe di dimensioni limitate

Ecco come è possibile risparmiare "oggetti" in una sessione. In sostanza, si serializzare / deserializzare oggetti a JSON e conservarla in un cookie.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top