我创建了一个小脚本来保持PHP会话处于活动状态,即使用户没有刷新页面也是如此。
以下是我通过PHP使用以保持会话活跃的Javascript:
refreshTheSession.php
它工作正常,但我注意到即使页面没有聚焦也会继续调用{{1}}脚本,我不想要因为这意味着某人可以使用该页面打开一个标签,并使会话无限期地保持活跃,即使他们在另一个标签上做其他事情也是如此。
如果用户仍然主动访问相关网页,我只希望会话保持活跃状态。
有可能吗?如果是这样,我如何修改上面的代码才能做到这一点?
答案 0 :(得分:2)
你不能告诉我什么"没有用?"确切地说,但我评论的第二个链接,页面可见性API,肯定会做你要求的,正如在这个工作示例中可以看到的那样:
function isDocumentVisible() {
return !(document.hidden || document.webkitHidden || document.msHidden);
}
// this is what you'd output via PHP:
setInterval(function(){
if (isDocumentVisible()) {
$.post('/refreshTheSession.php');}
}
, 90000);
// for the sake of demonstrating that this example is indeed working:
window.setInterval(function() {
console.log(isDocumentVisible() ? "document is visible, refresh session" : "document is not visible, don't refresh session");
}, 1000);

更新:使用document.setFocus()
,它看起来像这样:
// this is what you'd output via PHP:
setInterval(function(){
if (document.hasFocus()) {
$.post('/refreshTheSession.php');}
}
, 90000);
// for the sake of demonstrating that this example is indeed working:
window.setInterval(function() {
console.log(document.hasFocus() ? "document has focus, refresh session" : "document does not have focus, don't refresh session");
}, 1000);

Click into and out of the result iframe to see the focus change.