我使用计时器功能每五秒检查一次会话是否有效。
setInterval(checksession,5000);
function checksession(called_for) {
//alert('check-session')
$.ajax({
type:'POST'
,url:'CheckSession'
,success: validateresult
,data: { antiCSRF : '{{acsrf}}',
session_id: '{{session_id}}'}
//,error: function(){ alert('Session check failed') }
})
}
我想知道如果在检查会话的同时有多个ajax调用会发生什么。它会是两个独立的线程吗?
这是检查会话的正确方法吗?
答案 0 :(得分:1)
首先,你最好(imo)使用setTimeout
而不是setInterval
。你真的希望你的下一次检查在你得到上一次检查的答案后x秒发生,而不是每隔x秒就会发生(b / c服务器滞后,网络延迟,等等)。最重要的是,最好做setTimeout
然后在ajax回调中再做一次`setTimeout。
JS是单线程的,所以你不会在两个单独的线程中执行它,但是你可以同时挂起多个ajax调用,我认为这就是你的意思。
最后,关于“正确”。这实际上取决于你想要完成的事情。通常,具有滑动过期的会话(对服务器进行任何“检查”的唯一实时时间,因为否则它们可以一次到期并计算客户端上的时间)在一段时间不活动后会超时。如果你通过每隔五秒钟对服务器执行一次脚本'假'活动,那么你也可以将你的到期时间设置为无穷大而不会让它过期。或者在浏览器窗口关闭时将其设置为过期,无论哪种方式。
如果您正在尝试优雅地处理过期的会话,在Ajax中处理它的更好方法是只处理服务器应该发送给您的401错误(如果您不再登录)。