java - 创建 session 和 cookie 之间的区别?

标签 java session cookies playframework remember-me

我正在使用 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/

相关文章:

java - Log4j:如何更改 Logger 的 LoggingEvent 类

php - 我怎么被黑客入侵了?

java - 使用 JSESSIONID cookie 的 servlet 中的 session 处理未获取 session

javascript - if 条件让值溜走

python - 异常后的 SQLAlchemy session

javascript - 从javascript为不同的域设置cookie

java - 如何使用 JSP 和 Servlet 在 Java 中上传文件?

java - 使用 stdin-channel-adapter 的 spring 集成类是什么?

java - 在java中获取给定xml的所有子元素

database - session 不会自动从数据库中删除?