日期:2014-05-16  浏览次数:20652 次

js + Icefaces API 写一个session即将过期的提醒

最近做ICEFACES的项目 AJAX的, 要写一个session即将过期的提醒, 普通的项目直接一个js定时器就搞定了, 因为任何和服务器的响应都回刷新session的过期时间(重新计时),但是AJAX是部分刷新的, 你点个按钮 , session已经重新计算了,可是你的js定时器还在计时,这个就出问题了。

?

开始GOOGLE找了个帖子:http://www.iteye.com/topic/974771?page=3#1998066

这个帖子讨论了很多方法,我也各种过滤器, 各种后端调用前段JS, 各种失败, java那后端调用前段的类库居然不支持setTimeout()。

?

后来发现ICEFACES是自己有api的

?

?

The JavaScript API Reference shows the api and example.

http://www.icefaces.org/docs/latest/htmlguide/devguide/references4.html

?

ICEfaces javascript api :

?

Ice.onSendReceive(id, sendCallback, receiveCallback)

Ice.onAsynchronousReceive(id, callback)

Ice.onServerError(id, callback)

Ice.onSessionExpired(id, callback)

Etc…

?

I use the javascript api in ICEfaces:?

?

Ice.onSendReceive(id, sendCallback, receiveCallback)

?

这样就非常方便了, 每次请求和响应都能拦截到,直接重置计时器即可。对AJAX了解还不深处与菜鸟阶段。找寻问题思路太死,还是经验和视野的问题。

?

附上代码吧:

?

?

//------------------------------------
// Function to warn user session is about to expire
//------------------------------------
function InitSessionTimer() {
   
    warn_sec =  55 * 60 * 1000;             //Warning time in milliseconds
    timeout_sec =  60 * 60 * 1000;          //Actual timeout in milliseconds
    show_warning = true;
    epoch = new Date().getTime();
    CheckSessionStatus();
}

window.onload = function(){  
  InitSessionTimer();
  //use ICEFaces API Ice.onSendReceive()
  Ice.onSendReceive('document:Body',
		  function(){},
		  function(){InitSessionTimer();}
  );
};


function CheckSessionStatus() {
 
    //Check for session warning
    epoch2 = new Date().getTime();
    if (epoch2 > epoch + warn_sec && epoch2 < epoch + timeout_sec && show_warning) {
        show_warning = false; //Don't show again
        alert_shown = true;
        alert("Your session is about to expire. Please save your changes.");
        setTimeout("CheckSessionStatus();", 1000 * 60);
    }  else {
        setTimeout("CheckSessionStatus();", 1000 * 60);
    }
}