我正在使用 Play 创建我的第一个网站!框架,有一次我在用户登录时调用此方法:
static void connect(User user){
session.put("userid", user.id);
}
只需将用户 ID 存储在 session 中,我就可以检查它是否在每个请求中设置,工作正常。问题是,一旦关闭浏览器,cookie 就会丢失,用户需要重新登录。我想创建一个“记住我”选项,似乎唯一的方法是创建一个 cookie 并将其与响应一起发送,如下所示:
response.setCookie("user", userdata, "14d");
所以我想知道,当它做完全相同的事情时,创建一个 session 有什么意义? (但不会让我对 cookie 时间有任何控制)。还有一件事我还没有找到,是如何从请求中读取 cookie?
(我知道用 setCookie 创建的 cookie 没有加密,我需要调用 Crypto.sign()
)
最佳答案
1) 正在进行的 session !始终通过 cookie 维护(即在客户端),这归因于“不共享”方法。
2) 如果您使用 Secure 模块(或者如果您自己编写代码,可以查看代码并遵循),“authenticate()”方法采用参数“remember”并将 session 设置为 30 天(response.setCookie("rememberme", Crypto.sign(username) + "-"+ username, "30d");
)
即。如果用户不选择“记住”,他们的 session 只会持续到浏览器关闭。
3) 正如您提到的,真正的区别是 session.put() 不允许设置 session 超时。如果您想延长 session ,请将其设置在 cookie 上。
4) 如果您希望在用户执行 CRUD 时进行额外的身份验证,(即使用户选择“记住”或者他们的 session 已被您明确扩展),最好将用户名/ID 设置为缓存(而不是设置另一个标识符再次 session )并在用户注销时将其清除。如果您选择使用像 memcache 这样的分布式缓存,这将很好地扩展。
5) 要从 cookie 中读取,request.cookies.get("name")
很方便。
关于java - 创建 session 和 cookie 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6398715/