在执行AJAX调用时扩展Liferay的会话

extend session of Liferay when performing AJAX call

本文关键字:Liferay 会话 扩展 执行 AJAX 调用      更新时间:2023-09-26

我创建了一个portlet,它使用AJAX的每个函数。也就是说,portlet只呈现一次,我没有使用processAction之类的东西。

有没有一种方法可以使用javascript使用内置的Liferay函数来扩展用户的会话?

我试过

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

也不起作用。。

每当用户点击按钮时,我都会放入这些代码块

任何小费都会大有帮助。。

我遇到了同样的问题并解决了它。其主要思想是将session.js覆盖到ext插件中,并添加一些额外的方法:

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

您可以在此处查看解决方案。

Liferay.Session.extend();是答案,我在测试代码

时没有注意到会话被扩展