我们使用 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。
既然您可以访问
Liferay.Session
对象,您应该能够执行此操作来获取会话的状态:
Liferay.Session.get('sessionState');
如果会话仍处于活动状态,它将返回“活动”。
考虑您可以将门户设置为自动延长会话时间。会话永远不会过期。
使用此自定义值设置 Portal-ext.properties 文件
session.timeout.warning=0
session.timeout.auto.extend=true
这可能是您的应用程序的真实场景?
您可以通过 AJAX 调用进行轮询,并从 Java 代码中检索会话的状态,或者创建一个隐藏字段,其中包含每个页面加载中剩余的时间。 然后在 Javascript 中从当前时间中减去,如果用户超时,您可以执行您想要的任何操作。
这是一种棘手的方法,但可能对您的问题有用。
这对我有用。我只是将此代码放入我的主题的脚本中。我的主题用于整个网站。 https://liferay.dev/blogs/-/blogs/custom-liferay-session-on-expiration