2

我想要做的是在我的Play应用程序中实现一个简单的身份验证机制。与Play在ZenTask Tutorial中完成的不同,我认为在会话中存储经过身份验证的用户(仅限于)的会话ID并不是一个好主意(在Play中,它是一个签名cookie),因为服务器会对已登录的用户的登录状态没有任何控制权限。用户帐户的图像被删除,或者您想强制执行特定用户的注销 - 如果此用户拥有有效的Cookie,则仍然会成功通过身份验证下一个请求,因为服务器只会检查Cookie中是否存在会话标识。使用Play缓存API来存储用户会话ID?

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

的好处,从我的观点:

  • 提到的问题了。因为缓存内容可以在服务器端进行更改,因此已删除登录的用户或用户不再登录。
  • 目前,我不需要多台计算机用于播放应用程序,因此Play可以内部使用EHCache。如果我需要扩展并且将来需要部署额外的机器,EHCache可以被外部和分布式memached服务器所取代,而无需更改代码。

您怎么看?

回答

3

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

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

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

+0

谢谢,会试试看。最后一件事:你提到的优势不是可用性方面的缺点吗?如果我没有错,这意味着用户不可能同时从多个设备登录(例如,计算机和智能手机)。你知道这方面的最佳做法吗? – ceran 2015-02-08 14:02:26

+1

我同意。这取决于你的用例。我猜想一个好的平衡是登录表单上的“记住我”复选框。就我个人而言,如果你不处理任何重要的事情,但你的里程可能会有所不同,我认为饼干会议是可以的。 – Mikesname 2015-02-08 19:19:30