2014-01-28 44 views
1

我正在使用Play Framework 2.2.0与Scala。我想在修复时间后过期,所以我把这段代码放在conf/application.conf中最大年龄不适用于Play Framework 2.2.0(Scala)

application.session.maxAge=1h 

但它不工作。有什么办法来设置在application.conf或从controller.If覆盖任何方法会话,我想在50秒后到期会议,我会像这样的代码

application.session.maxAge=50sec 

感谢答复

最大年龄
+0

请在文档中阅读关于会话超时的[通知](http://www.playframework.com/documentation/2.0/JavaSessionFlash)。 – aim

回答

4

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

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

因此,您将不得不为每个Action编写代码,以检查当前时间和创建会话之间已经过了多长时间。我会建议使用Filter

1

application.session.maxAge = 1D不工作

好像在文件播放错误,但在2.2.x中他们根本ommit提这个选项,简单地说明该Cookie是短暂的,何时到期用户关闭Web浏览器。 (http://www.playframework.com/documentation/2.2.x/ScalaSessionFlash) 请注意,这不起作用,在Chrome中,我可以重新启动浏览器并且cookie仍然存在,并且我保持连接状态。 (请参阅Chrome://设置/饼干)

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

PS: 我也试图与session.maxAge = 1D,结果是根本没有cookie,并没有可能登陆...

+0

同样在这里。虽然文档中指出该cookie在关闭时将被浏览器删除,但这不适用于Chrome。它确实工作正如Firefox中所述。 – sebastianr

0

我有同样的问题,并添加时间戳(打勾)到会话并在检查超时之后用每个请求更新它。

事情是这样的:

// 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

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

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