5

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

4

5 回答 5

3

1) 游戏中的会话!始终通过 cookie 维护(即在客户端),这归因于“不共享”方法。

2) 如果您使用 Secure 模块(或者如果您正在编写自己的代码,可以查看代码并遵循),'authenticate()' 方法采用参数 'remember' 并将会话设置为 30 天(response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d");

IE。如果用户没有选择被“记住”,他们的会话只会持续到浏览器关闭。

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

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

5)从cookie中读取,request.cookies.get("name")很方便。

于 2011-06-19T06:57:19.377 回答
1

有两种方法可以在 Web 应用程序中存储状态 - 客户端和服务器端。

在服务器端,您可以使用 Session 或 Application 对象。在客户端,您可以使用视图状态、Cookie、隐藏字段等。

会话有一个超时持续时间,之后它就会过期。每当您访问 Web 应用程序时,都会为您创建一个会话,该会话会持续一段时间。因此,它是每个用户的事情。即使您增加超时持续时间,如果您关闭浏览器,它仍然会过期。应用程序对象在所有用户之间共享。

Cookie 是存储此类信息的更好方式,这些信息需要被记住更长的时间,例如一天或更长时间。你会注意到谷歌允许你保持登录状态好几天。那是因为他们使用 cookie 进行状态管理而不是会话。

于 2011-06-18T20:35:47.693 回答
0

您应该将用户 ID 存储在 cookie 中与会话属性完全相同的位置。使用 HttpServletRequest.getCookies() 读取 cookie。此方法返回 cookie 数组,因此您必须遍历数组以识别相关 cookie。

要更改 cookie,只需覆盖它。

于 2011-06-18T20:36:45.880 回答
0

会话允许您将服务器端数据绑定到特定浏览器会话:在后台自动创建一个 cookie,服务器使用该 cookie 来查找与特定浏览器关联的服务器端数据。

对会话 cookie 过期的控制通常在框架配置中的某处进行(或者有时在应用服务器使用的 web.xml 文件中)。您可以从HttpServletRequest'getCookies方法中读取 cookie。

编辑:getCookies文档,用于播放!有关持久登录和 cookie 检索的示例,请参阅http://groups.google.com/group/play-framework/msg/6e40b07ff9b49a8a框架。

于 2011-06-18T20:37:23.850 回答
0

基本上,会话仅在用户与您的应用程序交互的时间段+您指定的会话超时期间才可行。Cookie 的可用性是向用户存储相关信息,以便当他们再次访问网站时,您可以再次识别他们。

例如,如果您同时拥有关于用户的敏感信息和非敏感信息,您可以通过 cookie 确定他们是谁并加载所有非敏感信息来使您的应用程序更加友好。一旦他们对自己进行身份验证,您也可以加载敏感信息。

MSDN 在http://msdn.microsoft.com/en-us/library/ms178194.aspx上有一些关于如何使用 cookie 的很好的参考资料

于 2011-06-18T20:37:28.947 回答