Session playframework中的对象会话

Session playframework中的对象会话,session,playframework,Session,Playframework,如何为每个用户会话存储实例对象 我有一门为复杂算法建模的课程。该算法设计为分步运行。我需要为每个用户实例化这个类的对象。每个用户都应该能够逐步推进其实例。要在会话中存储值: //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();

如何为每个用户会话存储实例对象


我有一门为复杂算法建模的课程。该算法设计为分步运行。我需要为每个用户实例化这个类的对象。每个用户都应该能够逐步推进其实例。

要在会话中存储值:

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

只能将对象存储在缓存中。为此,对象必须可序列化。在会话中,您可以将密钥(必须是字符串)存储到缓存中。如果对象已从缓存中删除(与会话超时相同),请确保代码仍然有效。这一点在本书中有解释。 希望能解决你的问题

来自播放文档:

您可以将任何对象放入缓存中,如下例所示(在本例中,从文档中,您使用session.getId()为每个用户保存消息)

因为它是一个缓存,而不是一个会话,所以您必须考虑到数据可能不再可用,并且有一些方法可以从这里的某个位置(在本例中是消息模型)再次检索数据

无论如何,如果你有足够的内存,并且需要与用户进行短暂的交互,那么数据应该在那里,如果没有,你可以将用户重定向到向导的开头(你说的是某种向导页面,对吧?)

请记住,play采用无状态无共享方法,实际上根本没有会话,在它下面只是通过cookie处理它,这就是为什么它只能接受有限大小的字符串的原因。下面是如何在会话中保存“对象”。基本上,将对象序列化/反序列化为JSON并将其存储在cookie中


你的问题不是很清楚。如果你能告诉我你想做什么会有帮助的。苏瑞,我的英语很差。我现在编辑…哦,是的,对象必须是字符串抱歉,我看不到在引用文档中未记录的示例中可以显示的内容。好的!,谢谢你。但是我取消了application.conf文件中的
memcached=enabled
memcached.host=127.0.0.1:11211
注释,因此无法工作。我收到这个错误:“错误:服务器错误服务器遇到错误,无法完成您的请求。如果问题仍然存在,请报告您的问题,并提及此错误消息和导致此问题的查询。”我建议您询问游戏中的谷歌群,他们反应非常迅速。。。我没有memcaches方面的经验,但在localhost:11211上监听是有好处的,这是一项服务,应该安装并运行。。。
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.
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);
}