Вопрос

Как я могу сохранить сеанс пользователя Object Foreach

У меня есть класс для моделирования сложного алгоритма. Этот алгоритм предназначен для запуска пошагового шага. Мне нужно создать объекты этого класса для каждого пользователя. Каждый пользователь должен иметь возможность продвигать шаг за счет их экземпляра.

Это было полезно?

Решение

Вы можете хранить только объекты в кэше. Объекты должны быть сериализены для этого. На сессии вы можете хранить ключ (который должен быть строкой) в кэш. Убедитесь, что ваш код все еще работает, если объект был удален из кэша (то же самое, что и время сеанса). Это объясняется в http://www.playframework.org/documentation/1.0.3/cache.Отказ Надеюсь, что решит вашу проблему.

Другие советы

Для хранения значений на сеансе:

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

Если вы хотите неверно использовать / очистить объект сеанса

session.clear()

От игровой документации: 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.

Вы можете поместить любой объект в кэш, как в следующем примере (в этом примере от DOC http://www.playframework.org/documentation/1.1.1/Controllers#Session, вы используете Session.GetID (), чтобы сохранить сообщения для каждого пользователя)

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

Поскольку это кеш, а не сеанс, вы должны учитывать, что данные, которые больше не могут быть доступны, и некоторые ходят, чтобы еще раз могли восстановить его от неизменной (модель сообщения, в этом случае)

Во всяком случае, если у вас есть достаточно памяти, и он включает в себя короткое взаимодействие с пользователем, данные должны быть там, и в случае, если вы не можете перенаправить пользователя в начало мастера (вы говорите о какой-то странице мастера, верно ?)

Имейте в виду, что играют, с ней неактивной акции - ничто подходит, на самом деле нет сессионов вообще, под ним просто обрабатывает его через печенье, поэтому он может принимать только строки ограниченного размера

Вот как вы можете сохранить «объекты» на сеансе. В основном вы сериализуете / десериализуете объекты к JSON и храните его в cookie.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top