我们正在开发一个在其中一个脚本中使用 ignore_user_abort()和 set_time_limit(0)的系统。
我们必须使用 Jquery 向此脚本发送一个HTTP 1.1数据包,然后我们必须恢复并继续使用应用程序内的其他脚本。
但是一旦发送了数据包,会话就会以某种方式锁定,如果您尝试使用相同的浏览器刷新或加载域内的任何其他脚本,将不会加载到上一个完成(可能需要2个多小时)。
然而,可以继续使用其他浏览器中的应用程序,使用相同的用户名和密码,这使我认为它与会话有关。
我们需要防止这种情况或以某种方式解决这个问题,使这个脚本作为后台进程运行,而不会干扰应用程序其余部分的运行。
知道如何或为何会发生这种情况以及我们如何解决这个问题?
AJAX请求如下所示:
<script>
$('#launch').click(function () {
//acomodamos la UI
$('#launch').hide();
$('#c_wait').slideUp();
$('#c_started').fadeIn("slow");
//send the request
$.get("modules/_map.php", { funcion: "launch", scan_id: "<?php echo $scan->id; ?>" } );
});
</script>
答案 0 :(得分:2)
我认为你可能是对的 - 问题可能与会话相关(你的JavaScript并不表示正在执行同步请求)。
如果您正在运行使用会话信息的长请求,您可能会发现使用以下代码作为管理会话数据的模板是有益的:
// start the session
session_start();
// manipulate session data
// e.g.,
// $some_var = $_SESSION['some_var'];
// $_SESSION['some_var'] = 'something';
// flush any changes to the session and close
session_write_close();
// Start the long process here...
通过使用此方法,您可以在长请求开始之前操作会话,然后使用相同会话将其解锁以用于后续请求。