最大年龄在Play Framework 2.2.0(Scala)中不起作用

时间:2014-01-28 13:23:30

标签: scala session cookies playframework session-cookies

我正在使用Scala的Play Framework 2.2.0。我想在修复时间之后使会话到期,所以我把这段代码放在conf / application.conf

application.session.maxAge=1h

但它不起作用。有没有办法在application.conf中设置会话的最大年龄,或者从控制器覆盖任何方法。如果我想在50秒后过期会话,我必须像这样编码

application.session.maxAge=50sec

感谢您的回复

5 个答案:

答案 0 :(得分:5)

在Play Framework中,您无法自行设置超时。正如documentation for the Scala version of the Play Framework所述:

会话没有技术超时。它在用户关闭Web浏览器时到期。如果您需要特定应用程序的功能超时,只需将时间戳存储到用户会话中,然后根据您的应用程序需要使用它(例如,最长会话持续时间,最大不活动持续时间等)。

因此,您必须简单地为每个Action编写代码,以检查当前时间与会话创建之间经过的时间。我建议使用Filter

答案 1 :(得分:5)

所选答案现已过时。 您可以通过在application.conf中配置session.maxAge来执行此操作,请参阅recent pull request

  

默认情况下,会话没有技术超时。它到期了   当用户关闭Web浏览器时。如果您需要功能超时   对于特定应用程序,只需将时间戳存储到用户   会话并使用它,但您的应用程序需要(例如最多   会话持续时间,最大不活动持续时间等)。你也可以设置   通过配置密钥,会话cookie的最大年龄   application.conf中的session.maxAge(以毫秒为单位)。

答案 2 :(得分:1)

application.session.maxAge = 1d无效

它似乎是文档中的游戏错误,但在2.2.x中,他们只是忽略提及此选项,只是说明cookie是暂时的,并在用户关闭Web浏览器时过期。 (http://www.playframework.com/documentation/2.2.x/ScalaSessionFlash) 请注意,这不起作用,在Chrome中,我可以重新启动浏览器,但Cookie仍然存在且我保持连接状态。 (参见chrome:// settings / cookies)

配置文件中一天的正确选项是: session.maxAge = 86400 见http://www.racerkidz.com/wiki/Blog:Razie_Div_Blog/Post:No_expiry_for_play_cookie 对于来源。

PS: 我也尝试过session.maxAge = 1d,结果根本没有cookie,也没有可能的登录......

答案 3 :(得分:1)

我遇到了同样的问题,并在会话中添加了时间戳(勾号),并在检查超时后对每个请求进行了更新。

这样的事情:

// see if the session is expired
String previousTick = session("userTime");
if (previousTick != null && !previousTick.equals("")) {
  long previousT = Long.valueOf(previousTick);
  long currentT = new Date().getTime();
  long timeout = Long.valueOf(Play.application().configuration().getString("sessionTimeout")) * 1000 * 60;
  if ((currentT - previousT) > timeout) {
    // session expired
    session().clear();
    return null;
  } 
}
// update time in session
String tickString = Long.toString(new Date().getTime());
session("userTime", tickString);

http://www.poornerd.com/2014/04/01/how-to-implement-a-session-timeout-in-play-framework-2/

然后将sessionTimeout = 15(以分钟为单位)添加到您的conf文件中。

答案 4 :(得分:0)

现在在playframework中,您可以设置会话过期时间

play.http.session.maxAge=Value

在conf文件中。