Как проверить, истек ли тайм-аут сеанса Liferay в Javascript?

Мы используем Liferay для управления портлетами и сеансом, а остальная часть приложения построена с использованием angular. Портлеты сами по себе являются одностраничными приложениями. Проблема, с которой мы столкнулись, заключается в том, что liferay не перенаправляет пользователя, когда истекает время сеанса и выполняется запрос ajax. Если пользователь переходит к другому портлету или перезагружает страницу, liferay определяет, что время сеанса истекло, но если пользователь щелкает какую-либо ссылку на странице, что не приводит к перезагрузке страницы, liferay не определяет этот сеанс. истекло время ожидания.

Чтобы решить эту проблему, я пытаюсь определить с помощью кода Javascript, действителен ли сеанс liferay или нет. Я могу получить доступ к объекту Liferay.Session в своем JS, но не уверен, какую функцию или поле я могу использовать, чтобы определить, действителен ли сеанс или нет.

Может кто-то помочь мне с этим?

Ниже приведен код, с помощью которого мы получаем доступ к сеансу Lieray.

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

Мы используем Liferay 6.0.2.


person Logan    schedule 04.10.2016    source источник


Ответы (4)


Поскольку у вас есть доступ к объекту Liferay.Session, вы сможете сделать это, чтобы получить состояние сеанса:

Liferay.Session.get('sessionState');

Он вернет «активный», если сеанс все еще активен.

person Lifehack    schedule 24.10.2016
comment
Даже если время моего сеанса истекло или я вышел из Liferay и на странице входа в систему, я все равно получаю это значение как истинное. Что может быть причиной? - person Vrishank; 26.06.2020

Учтите, что вы можете настроить портал на автоматическое продление времени сеанса. Сессия никогда не истекает.

Настройте файл portal-ext.properties с этим пользовательским значением.

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

Это может быть реальный сценарий для вашего приложения?

person Daniele Baggio    schedule 04.10.2016

Вы можете опросить через вызов AJAX и получить статус сеанса из кода Java или создать скрытое поле со временем, которое остается при каждой загрузке страницы. Затем в Javascript выполните вычитание из текущего времени, и в случае, если пользователь не вовремя, вы можете выполнить любое действие, которое хотите.

Является липким подходом, но может быть полезен для вашей проблемы.

person Jorge B.    schedule 04.10.2016

Вы можете установить хук, который будет срабатывать по тайм-ауту сеанса.

Как упоминалось здесь https://stackoverflow.com/a/28302153/2834053

Надеюсь это поможет.

person Varun Chawla    schedule 08.02.2017