使用Play缓存API存储用户会话ID?

时间:2015-02-07 14:47:03

标签: scala authentication caching playframework playframework-2.0

我想要做的是在我的Play应用程序中实现一个简单的身份验证机制。与在Play ZenTask Tutorial中完成的不同,我认为在会话中存储经过身份验证的用户 的会话ID并不是一个好主意(在Play中,这是一个签名cookie),因为那时服务器没有对已经登录的用户的登录状态的任何控制。图像用户帐户被删除或者你想强制注销特定用户 - 如果这个用户有效cookie,他仍将在下一个请求中成功通过身份验证,因为服务器只会检查cookie中是否存在会话ID。

所以我想知道:使用Play缓存API存储用户的会话id怎么样?在每个页面请求中,可以在缓存中查找请求中包含的会话ID。如果不存在,那么用户必须登录。

从我的观点中获益:

  • 上述问题消失了。已强制执行注销的已删除用户或用户不再登录,因为可以在服务器端更改缓存内容
  • 目前,播放应用程序不需要多台机器,因此Play可以在内部使用EHCache。如果我需要扩展并且将来必须部署其他机器,可以用外部和分布式memached服务器替换EHCache,而无需更改代码。

您怎么看?

1 个答案:

答案 0 :(得分:3)

我认为这是一种非常有效的方法,而且,举一个例子,play2-auth库提供了一种方法来使用CacheIdContainer

作为作者points out,使用会话cookie的这种有状态方法的主要优点是,当用户登录其他地方时,它会使用户之前的会话无效。

主要的缺点是,至少如果你使用的是Play的默认EHCache,那么会话不会在服务器重启时持续存在,但你可以使用类似memcache的东西来解决这个问题。