продлить сеанс Liferay при выполнении вызова AJAX - PullRequest
5 голосов
/ 01 марта 2012

Я создал портлет, который использует AJAX для каждой функции. Таким образом, портлет отображается только один раз, и я не использовал processAction и т. П.

Есть ли способ продлить сеанс пользователя, используя встроенную функцию Liferay, используя javascript?

Я пытался

Liferay.Session.extend();

но, похоже, не работает ..

Я также попробовал решение на форуме ICEfaces, которое является

    if (Liferay.Session._stateCheck) {
           window.clearTimeout(Liferay.Session._stateCheck);
           Liferay.Session._stateCheck = null;
         }
         Liferay.Session.init({
           autoExtend: false,
           timeout: Liferay.Session._timeout,
           timeoutWarning:  Liferay.Session._warning
           });jQuery.ajax({url: Liferay.Session._sessionUrls.extend});

тоже не работает ..

Я помещаю эти блоки кода всякий раз, когда пользователь нажимает кнопку

Любой совет очень помог бы ..

Ответы [ 2 ]

4 голосов
/ 09 мая 2012

У меня была такая же проблема, и я решил ее. Основная идея состоит в том, чтобы переопределить файл session.js в ext-plugin и добавить дополнительный метод:

extendExternal: function() {
  var instance = this;

  if (instance != undefined) {
    instance.extend();
  }
}

также должен быть обновлен метод setCookie:

 setCookie: function(status) {
   var instance = this;

   var currentTime = new Date().getTime();

   var options = {
      secure: A.UA.secure,
      path: "/"
   };

   A.Cookie.set(instance._cookieKey, status || currentTime, options);
 }

Чтобы использовать один и тот же путь к файлам cookie для каждой страницы.

И некоторые глобальные ajax-события могут быть использованы для «автоматического» вызова метода extendExternal:

AUI().use('event', function(A){
 A.on('io:start', function(transactionid, arguments){
   if (Liferay.Session._cookieKey != undefined && Liferay.Session._cookieKey != null) {
     if (arguments != 'sessionExtend') {
       Liferay.Session.extendExternal();
     }
   }
 });
});

в этом случае метод расширения должен быть обновлен с помощью:

// added in order to differentiate session extend ajax calls and other ajax call, to     avoid infinit loop
 A.io.request(instance._sessionUrls.extend, {
    arguments: 'sessionExtend'
 });

Вы можете проверить решение здесь .

1 голос
/ 22 марта 2012

Liferay.Session.extend ();это ответ, я не заметил, что сеанс продлен при тестировании кода

...