我使用计时器函数每五秒检查一次 session 是否有效。
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') }
})
}
我想知道如果在检查 session 时同时有多个ajax调用会发生什么。它会是两个独立的线程吗?
这是检查 session 的正确方法吗?
最佳答案
因此,首先,您最好使用 setTimeout
而不是 setInterval
。您确实希望下一次检查在获得上一次检查的答案后 x 秒进行,而不是每隔 x 秒进行一次(无论是服务器延迟、网络延迟等)。最重要的是,我认为最好先执行 setTimeout
,然后在 ajax 回调中执行另一个 `setTimeout。
JS 是单线程的,所以你不会在两个单独的线程中执行它,但你可以同时挂起多个 ajax 调用,我认为这就是你的意思。
最后,关于“正确”。这实际上在一定程度上取决于您想要实现的目标。一般来说,具有滑动到期时间的 session (对服务器进行任何“检查”的唯一实时时间应该重要,因为否则它们可以一次获得到期时间并在客户端上计算时间)在一段时间不活动后会超时。如果您的脚本通过每五秒 ping 一次服务器来进行“假”事件,那么您不妨将过期时间设置为无穷大,而不让它永远过期。或者将其设置为在浏览器窗口关闭时过期,无论哪种方式。
如果您尝试优雅地处理过期 session ,那么在 Ajax 中处理它的更好方法是仅处理服务器在您不再登录时向您发送的 401 错误。
关于JavaScript 定时器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271906/