6

各ユーザーセッションのインスタンスオブジェクトを保存するにはどうすればよいですか?

複雑なアルゴリズムをモデル化するクラスがあります。このアルゴリズムは、段階的に実行するように設計されています。ユーザーごとにこのクラスのオブジェクトをインスタンス化する必要があります。各ユーザーは、インスタンスを段階的に進めることができる必要があります。

4

4 に答える 4

6

オブジェクトはキャッシュにのみ保存できます。このために、オブジェクトはシリアル化可能である必要があります。セッションでは、キー(文字列である必要があります)をキャッシュに保存できます。オブジェクトがキャッシュから削除された場合でもコードが機能することを確認してください(セッションタイムアウトと同じ)。これはhttp://www.playframework.org/documentation/1.0.3/cacheで説明されています。それがあなたの問題を解決することを願っています。

于 2010-09-07T14:40:07.853 に答える
5

セッションに値を保存するには:

//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()
于 2010-09-07T08:03:51.493 に答える
0

プレイドキュメントから: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から、 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を介して処理するだけなので、限られたサイズの文字列しか受け入れられないことに注意してください。

于 2011-02-25T12:30:33.043 に答える
0

セッションに「オブジェクト」を保存する方法は次のとおりです。基本的に、オブジェクトをJSONにシリアル化/逆シリアル化し、Cookieに保存します。

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

于 2012-08-20T04:38:16.293 に答える