我们设计了一个html页面,在10分钟不活动后应该超时。 该逻辑实现为
function CheckExpire()
{
$.ajax({
type:'GET',
url:self.location.pathname+"?checkexpire",
data:'',
dataType:"json"
})
.done(function(exp){
if(exp.expired != "no")
window.location.reload();
})
}
setInterval( function() {
$.ajax({
type:'GET',
url:window.location.href+"wan_config_ipv6.cgi?status",
dataType: "text",
success : function(data,status){ }
},2000);
LoadTopMenu();
$("#div_menu_left ul li").eq(0).click();
setInterval("CheckExpire();", 10000);
})
但是,稍后我们需要每隔2秒从同一个函数更新状态。 更改后,网络不会在10分钟不活动后退出,因为每2秒网页处于活动状态。
任何人都可以为此问题提出解决方法或实施注销以及状态更新的替代方法。
服务器端cgi代码
int CGIMain(int argc,char* argv[])
{
head("Content-type:text/html; charset=UTF-8");
head("Cache-Control:private,max-age=0;");
if(argc==2&&!strcmp(argv[1],"checkexpire"))
{
check_expire(); //exported a JSON object and exit
return 0;
}
static void check_expire()
{
struct session_data sdata;
char *sid = CGIGetCookie("sid");
int expired = 2;
unsigned expinsec = 0;
memset(&sdata, 0, sizeof(sdata));
if(sid && load_session_data(&sdata)==0)
{
if(!strcmp(sdata.sid,sid))
{
struct sysinfo si;
sysinfo(&si);
expired = (sdata.expire < si.uptime);
expinsec = sdata.expire - si.uptime;
}
}
char* estat[] = {"no", "yes", "unknown"};
vwrite("{\"expired\":\"%s\", \"expire\":\"%d\"}", estat[expired],
expinsec);
return -1;
}
char* CGIGetCookie(char *name)
{
char *co_str=getenv("HTTP_COOKIE");
if(co_str)
{
return GetCookieVal(name,strdup(co_str));
}
return NULL;
}
答案 0 :(得分:0)
使用一个变量,每次进行AJAX调用时都会递增,当它达到5时,退出。