我有一个学校项目,我必须使用 Java。最近发现了play framework,想尝试一下。快速入门非常简单,但我遇到了 session 问题。
本质上是无状态的,play 将整个 session 在 cookie 中发送给用户,并在下一个请求时接收它,因此它只允许 session 中的数据量有限。
我想做的是在用户登录时从数据库中获取 User 对象,并将其保存在 session 中,这样我就可以从模板等访问它(我在 User 类中有一些方法需要按顺序调用自定义 UI),但如果我放置 User 对象,play 会调用它的 toString 方法并将其放入 session 中。
我发现推荐的方法是将大量数据放入缓存中,但我不知道如何从模板访问它(我想我可以使用 @Before 注释创建方法并将用户添加到 renderArgs,但那样做对我来说似乎不太干净)。另一个问题是缓存的生命周期有限,所以我的对象可能会消失。
有没有人遇到过这类问题?
有什么方法可以在 Play 时使用服务器端 session 吗?我不需要此项目的 REST 功能,因此,就我而言,应用程序可以保存状态...
最佳答案
使用 Java Serialization 将 Hashmap 序列化为文件或数据库。在您存储在用户 cookie 中的唯一标识符之后命名文件或 id 列。然后在序列化 hashmap 之前将 User 对象放入 hashmap 中。现在您有一个可以访问的持久存储。当框架忘记了 User 对象或任何其他 session 信息时,您可以反序列化 Hashmap。然后写一些静态辅助方法,static Object SessionDB.get(String id, String key) 和 SessionDB.put(String id, String key, Object value)。我在我自制的框架上使用这种方法在一个小型服务器场上存储 session 信息。当然我用的是数据库,不是文件系统。
关于java - 如何在 Play Framework 的 session 中存储对象(不是字符串)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1694828/