1

我们正在开发一个在其中一个脚本中使用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>
4

1 回答 1

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...

通过使用这种方法,您可以在长请求开始之前操纵会话,然后使用同一会话为后续请求解锁它。

于 2012-12-20T23:20:46.920 回答