java - 如何在 Play Framework 的 session 中存储对象(不是字符串)?

标签 java session caching playframework

我有一个学校项目,我必须使用 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/

相关文章:

c# - 启动时对象初始化的模式

java - 矩阵数组相乘 - 如何避免冗余

java - 在 PHP 中运行 shell_exec ('which java' ) 什么都不返回

php - 如何从 Laravel session 中删除数组

java - 多线程:操纵同一对象的不同字段的线程

caching - 浏览器何时自动清除外部 JavaScript 文件的缓存?

java - 无法在我的独立 Java SE 应用程序中使用 Weld 进行上下文和依赖注入(inject) (CDI)

jquery - 如何在 jquery/css 中设置 session 变量?

php - 向用户显示他已注销

angular - (Angular 4, AOT, cache refresh) 服务器发生代码变更时如何强制终端用户浏览器硬刷新?