我正在使用Scala的Play Framework 2.2.0。我想在修复时间之后使会话到期,所以我把这段代码放在conf / application.conf
中application.session.maxAge=1h
但它不起作用。有没有办法在application.conf中设置会话的最大年龄,或者从控制器覆盖任何方法。如果我想在50秒后过期会话,我必须像这样编码
application.session.maxAge=50sec
感谢您的回复
答案 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文件中。