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

问题描述 投票:0回答:5

我们使用 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。

javascript liferay liferay-aui
5个回答
1
投票

既然您可以访问

Liferay.Session
对象,您应该能够执行此操作来获取会话的状态:

Liferay.Session.get('sessionState');

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


0
投票

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

使用此自定义值设置 Portal-ext.properties 文件

session.timeout.warning=0
session.timeout.auto.extend=true

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


0
投票

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

这是一种棘手的方法,但可能对您的问题有用。


0
投票

您可以设置一个钩子,该钩子将在会话超时时触发。

正如这里提到的 https://stackoverflow.com/a/28302153/2834053

希望这有帮助。


0
投票

这对我有用。我只是将此代码放入我的主题的脚本中。我的主题用于整个网站。 https://liferay.dev/blogs/-/blogs/custom-liferay-session-on-expiration

© www.soinside.com 2019 - 2024. All rights reserved.