如何检查Liferay会话是否已在Javascript中超时?

时间:2016-10-04 07:10:27

标签: javascript liferay liferay-aui

我们使用Liferay来管理portlet和会话,其余的应用程序是使用angular构建的。这些portlet本身就是单页面应用程序。我们面临的问题是,当会话超时并执行ajax请求时,liferay不会重定向用户。如果用户导航到某个其他portlet或重新加载页面,则liferay会识别该会话已超时,但如果用户点击页面上的某些链接(这不会导致页面重新加载),则liferay不会。确定该会话已超时。

要解决此问题,我尝试使用Javascript代码识别,如果liferay会话有效。我可以在我的JS中访问Liferay.Session对象,但我不确定我可以用什么函数或字段来识别会话是否有效。

有人可以帮我这个吗?

以下是我们用来访问Lieray会话的代码。

AUI().use('liferay-session', function(A) {
  //Liferay.Session
  //some logic
}

我们正在使用Liferay 6.0.2。

4 个答案:

答案 0 :(得分:1)

由于您可以访问Liferay.Session对象,因此您应该可以执行此操作以获取会话状态:

Liferay.Session.get('sessionState');

如果会话仍处于活动状态,它将返回“活动”。

答案 1 :(得分:0)

考虑您可以将门户设置为自动自动延长会话时间。会议永远不会过期。

使用此自定义值

设置portal-ext.properties文件
session.timeout.warning=0
session.timeout.auto.extend=true

这可能是您应用的真实场景吗?

答案 2 :(得分:0)

您可以通过AJAX调用进行轮询,并从Java代码中检索会话的状态,或者创建一个隐藏字段,其中包含每个页面加载中保留的时间。 然后在Javascript中从当前时间做减法,如果用户没有时间,你可以执行任何你想要的动作。

是一种粘性方法,但可能对您的问题有用。

答案 3 :(得分:0)

您可以设置一个在会话超时时触发的挂钩。

如此提及 https://stackoverflow.com/a/28302153/2834053

希望这有帮助。