微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 创建会话和cookie之间的区别?

我在Play的第一个网站上工作!框架,有时我在用户登录调用方法

static void connect(User user){
    session.put("userid",user.id);
}

只需将用户ID存储在会话中,我就可以检查它是否在每个请求中设置,工作正常.问题是,一旦浏览器关闭,cookie就会丢失,用户需要再次登录.我想创建一个“记住我”选项,似乎唯一的方法是创建一个cookie并将其与响应一起发送,如下所示:

response.setCookie("user",userdata,"14d");

所以我想知道,创建一个会话有什么意义,当它做同样的事情时? (但不会让我对cookie时间有任何控制权).而我还没有发现的另一件事是如何从请求中读取cookie?

(而且我知道使用setCookie创建的cookie未加密,我需要调用Crypto.sign())

最佳答案
1)一场比赛!始终通过cookie维护(即在客户端),这归因于“无分享方法.

2)如果你使用安全模块(或者你可以查看代码,如果你自己编写则遵循),’authenticate()’方法采用参数’remember’并将会话设置为30天(响应. setCookie(“rememberme”,Crypto.sign(用户名)“ – ”用户名,“30d”);)

即.如果用户不选择“记住”,他们的会话将持续到浏览器关闭为止.

3)真正的区别在于,正如您所提到的,session.put()不允许设置会话超时.如果要扩展会话,请在cookie上设置它.

4)如果您想在用户执行CRUD时进行额外的身份验证(即使用户选择“记住”或者他们的会话已被您明确扩展),最好将用户名/ ID设置为缓存(而不是再次将其他标识符设置为会话) )并在用户注销时将其清除.如果您选择使用像memcache这样的分布式缓存,这将很好地扩展.

5)要从cookie中读取,request.cookies.get(“name”)会很方便.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐