объектная сессия в игровой структуре - PullRequest
6 голосов
/ 07 сентября 2010

Как я могу сохранить экземпляр объекта для каждого сеанса пользователя?

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

Ответы [ 4 ]

6 голосов
/ 07 сентября 2010

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

4 голосов
/ 07 сентября 2010

Чтобы сохранить значения в сеансе:

//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()
0 голосов
/ 20 августа 2012

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

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

0 голосов
/ 25 февраля 2011

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

Вы можете поместить любой объект в кеш, как в следующем примере (в этом примере из документа http://www.playframework.org/documentation/1.1.1/controllers#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);
}

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...