游戏如何验证cookie?
Cookie看起来像这样:
PLAY_SESSION = e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-的userid%3A1
// My logout code
def logout() = Action {
Ok("").withNewSession
}
From the documentation
放弃整个会话
有一个特殊的操作会丢弃整个会话:
Ok("Bye").withNewSession
答案 0 :(得分:10)
您没有指定如何对用户进行身份验证,所以我只是猜测,您正在使用简单的样本,这很简单。
它使用用户的ID来识别用户,并检查是否未操作已签名的会话cookie,因此如果您使用适当的签名重新创建cookie,它仍然有效。
您应该在服务器端为会话密钥创建一些区域,即。在DB或内存缓存中(这将比DB快)。对于每个成功的登录操作,其密钥应该是随机生成的(并且优选地相当长),并且还应该包含用于标识用户,到期日期等的数据。接下来,您应该将此随机sess_key
放入Play的会话而不是电子邮件地址在DB中记录用户或其行的ID,并且在注销和/或到期日期之后,应将其删除。在这种情况下,即使您在注销后丢失cookie,也无法使用非esixting sess_key
正确登录。
每次重新启动应用程序时都会清除AFAIR标准内存缓存,以确保删除数据库中的所有sess_keys
,并且可以使用Global object并截断{{1}中的表}} 方法。
答案 1 :(得分:5)
我更仔细地找到答案the documentation,并将不同部分组合在一起。
会话没有技术超时。它会在到期时到期 用户关闭Web浏览器。如果你需要一个功能超时 特定的应用程序,只是将时间戳存储到用户Session和 但是应用程序需要使用它(例如最大会话 持续时间,最长不活动时间等。)。
了解Session和Flash数据不是很重要 由服务器存储但被添加到每个后续HTTP请求中, 使用cookie机制。这意味着数据大小非常大 限制(最多4 KB),并且您只能存储字符串值。
所以我担心如果cookie丢失,任何人都可以登录服务器以备将来使用。
我需要做的就是添加一个自制的时间戳授权(在cookie中保存时间戳并验证服务器端)