2012-03-01 5 views
5

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

Есть ли способ продлить сеанс пользователя, используя встроенную функцию 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}); 

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

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

Любой наконечник очень поможет.

+1

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

+0

Привет, пожалуйста, создайте ответ и поставьте свое решение из комментария к нему и примите его. Таким образом, люди сразу узнают, что есть решение для этого вопроса. –

ответ

4

У меня была такая же проблема и она была решена. Основная идея заключается в том, чтобы переопределить session.js Into внутр-плагин, и добавить дополнительный метод:

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); 
} 

Для того, чтобы использовать один и тот же путь куков для каждой страницы.

И некоторое глобальное событие 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' 
}); 

Вы можете проверить решение here.

+0

Рассмотрите возможность улучшения этого ответа, чтобы содержать больше, чем просто ссылку. См. Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

1

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

Смежные вопросы