使用 Play 缓存 API 来存储用户会话 ID?
Using the Play cache API for storing user session ids?
我想做的是在我的 Play 应用程序中实现一个简单的身份验证机制。与 Play ZenTask Tutorial 中的做法不同,我认为将经过身份验证的用户的会话 ID 单独 存储在会话中(在 Play 中, 是一个签名的cookie),因为这样服务器就无法控制已经登录的用户的登录状态。想象一个用户帐户被删除或者你想强制注销一个特定的用户——以防这个用户有一个有效的 cookie,他仍然会在下一个请求时成功通过身份验证,因为服务器只会检查 cookie 中是否存在会话 ID。
所以我想知道:使用 Play 缓存 API 来存储用户的会话 ID 怎么样?在每个页面请求中,可以在缓存中查找请求中包含的会话 ID。如果不存在,则用户必须登录。
我认为的好处:
- 提到的问题已经解决。已删除的用户或强制注销的用户不再登录,因为可以在服务器端更改缓存内容
- 目前,我不需要超过一台机器来运行 play 应用程序,因此 Play 可以在内部使用 EHCache。如果我需要扩展并且将来必须部署额外的机器,EHCache 可以替换为外部和分布式 memached 服务器,而无需更改代码。
你怎么看?
我认为这是一种完全有效的方法,举个例子,play2-auth library provides a way to do this with its CacheIdContainer。
作为那里的作者 points out 与使用会话 cookie 的方法相比,这种有状态方法的主要优势在于,当用户在其他地方登录时,它会使用户之前的会话无效。
主要缺点,至少如果您使用 Play 的默认设置 EHCache
,是会话不会在服务器重新启动后持续存在,但您可以使用诸如内存缓存之类的东西来解决这个问题。
我想做的是在我的 Play 应用程序中实现一个简单的身份验证机制。与 Play ZenTask Tutorial 中的做法不同,我认为将经过身份验证的用户的会话 ID 单独 存储在会话中(在 Play 中, 是一个签名的cookie),因为这样服务器就无法控制已经登录的用户的登录状态。想象一个用户帐户被删除或者你想强制注销一个特定的用户——以防这个用户有一个有效的 cookie,他仍然会在下一个请求时成功通过身份验证,因为服务器只会检查 cookie 中是否存在会话 ID。
所以我想知道:使用 Play 缓存 API 来存储用户的会话 ID 怎么样?在每个页面请求中,可以在缓存中查找请求中包含的会话 ID。如果不存在,则用户必须登录。
我认为的好处:
- 提到的问题已经解决。已删除的用户或强制注销的用户不再登录,因为可以在服务器端更改缓存内容
- 目前,我不需要超过一台机器来运行 play 应用程序,因此 Play 可以在内部使用 EHCache。如果我需要扩展并且将来必须部署额外的机器,EHCache 可以替换为外部和分布式 memached 服务器,而无需更改代码。
你怎么看?
我认为这是一种完全有效的方法,举个例子,play2-auth library provides a way to do this with its CacheIdContainer。
作为那里的作者 points out 与使用会话 cookie 的方法相比,这种有状态方法的主要优势在于,当用户在其他地方登录时,它会使用户之前的会话无效。
主要缺点,至少如果您使用 Play 的默认设置 EHCache
,是会话不会在服务器重新启动后持续存在,但您可以使用诸如内存缓存之类的东西来解决这个问题。