Php 并行进程,忽略用户中止并设置时间限制(0)

Php 并行进程,忽略用户中止并设置时间限制(0),php,jquery,ajax,parallel-processing,Php,Jquery,Ajax,Parallel Processing,我们正在开发一个系统,该系统在其中一个脚本中使用ignore\u user\u abort()和set\u time\u limit(0) 我们必须使用Jquery向这个脚本发送一个HTTP 1.1数据包,然后我们必须继续使用应用程序中的其他脚本 但一旦数据包被发送,会话就会以某种方式被锁定,如果您尝试使用同一浏览器刷新或加载域内的任何其他脚本,则在前一个脚本完成之前,不会加载(这可能需要2个多小时) 但是,可以使用相同的用户名和密码从另一个浏览器继续使用该应用程序,这使我认为它与会话有关 我们

我们正在开发一个系统,该系统在其中一个脚本中使用ignore\u user\u abort()set\u time\u limit(0)

我们必须使用Jquery向这个脚本发送一个HTTP 1.1数据包,然后我们必须继续使用应用程序中的其他脚本

但一旦数据包被发送,会话就会以某种方式被锁定,如果您尝试使用同一浏览器刷新或加载域内的任何其他脚本,则在前一个脚本完成之前,不会加载(这可能需要2个多小时)

但是,可以使用相同的用户名和密码从另一个浏览器继续使用该应用程序,这使我认为它与会话有关

我们需要以某种方式防止或解决此问题,以使此脚本作为后台进程运行,而不干扰应用程序其余部分的功能

你知道这是怎么发生的,为什么会发生,以及我们如何解决它吗

AJAX请求如下所示:


$(“#启动”)。单击(函数(){
//阿科莫多斯拉乌伊酒店
$(“#启动”).hide();
$('c#u wait')。slideUp();
$('c#u start')。fadeIn(“慢”);
//发送请求
$.get(“modules/_map.php”,{function:“launch”,scan_id:”});
});

我认为您可能是对的-问题很可能与会话相关(您的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...

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

您可以发布正在进行的
ajax()
调用以及可能正在进行的任何
ajaxSetup()
调用吗。听起来你在使用同步请求,这将锁定浏览器(甚至在其他选项卡上)。是的,当然,让我更新问题。我以前也这么认为,但如果我们直接从浏览器发送请求,情况似乎也是如此……在我看来,这就像是在同一个唯一会话中获取/写入的数据上的数据库锁。当进程正在运行时,
show processlist
的输出是什么?+您在同一浏览器中运行了一个挂起的“挂起”响应?不要获取此信息。这将如何阻止同一会话中的新请求?您认为这可能是服务器延迟响应的原因吗?当您调用
session\u start()
时,它会通过其驱动程序锁定会话对象(大多数人使用文件,因此它会锁定会话文件)。这是为了防止文件被来自不同请求的并发写入损坏。如果一个客户端可以在同一个会话中发出多个请求,在其他请求仍在进行的情况下对文件进行全面写入,您能想象这种混乱吗?事实上,这就解释了这个问题(他们也推荐相同的解决方案)。太棒了,我们现在就来试试,我马上告诉你它是如何工作的:)谢谢你!
// 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...