java - Play 框架 session 和 cookie 是如何工作的?

标签 java scala authentication cookies playframework-2.0

play 如何验证 cookie?

  • 我注意到在我重新启动服务器后我仍然登录,即使我 不要在数据库中保留任何 session 数据。
  • 我也注意到了 我可以将服务器上的日期设置为大于到期日期 cookie 的日期,但我仍然登录。
  • 我退出了 (将 cookie 保存到文本文件中)并且浏览器丢失了 cookie。然后我 从文本文件重新创建 cookie,我再次登录。

cookie 看起来像这样:

PLAY_SESSION=e6443c88da7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx-userid%3A1

// My logout code
def logout() = Action {
  Ok("").withNewSession
}

From the documentation
丢弃整个 session
有一个丢弃整个 session 的特殊操作:

Ok("Bye").withNewSession

最佳答案

您没有指定如何对用户进行身份验证,所以我只是猜测,您正在使用简单的示例,它非常……简单。

它使用用户的 id 来识别用户,并检查签名的 session cookie 是否未被操纵,因此如果您使用正确的签名重新创建 cookie,它仍然有效。

您应该在服务器端为 session key 创建一些区域,即。在数据库或内存缓存中(这将比数据库更快)。它的 key 应该为每个成功的登录操作随机生成(最好是相当长),并且还应该包含用于识别用户、到期日期等的数据。接下来你应该把这个随机的 sess_key 放到 Play 的 session 中已登录用户的电子邮件地址或他在数据库中的行的 ID,并且在注销和/或到期日期后应将其删除。在这种情况下,即使您在注销后丢失了 cookie,也无法使用非 esixting sess_key 正确登录。

AFAIR 标准内存缓存将在每次重新启动应用程序时被清除,以确保数据库中的所有 sess_keys 也将被删除,您可以使用 Global object并在 onStart(...) 方法中截断表格。

关于java - Play 框架 session 和 cookie 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14627802/

相关文章:

java - 运行 spring mvc 项目时出现一些错误

java - 通过 WebView 将 HTML 表单加载到我的 Android 应用程序中?

scala - 创建像 TextLine 这样的 Scalding Source,将多个文件组合成单个映射器

scala - 使用 spark 将 null 设置为 Hive 表中数字数据类型的值

java - 在 SCALA 中使用动态值进行 Base64 JAVA 编码 - GATLING

Android在网页字段中插入变量

ruby-on-rails - PG::ConnectionBad: FATAL: 用户 "alphauser"的密码验证失败

java - JRE如何才能让Tomcat处理JSP文件呢?为什么不是JDK?

java - java中的Strictfp方法有什么用?

security - 应用程序安全问题: How easy is it to fake an IP-Address?