Php脚本会被多次自动调用

KOU*_*DAL 6 javascript php ajax jquery

我在这里遇到一个奇怪的问题.我正在使用javascript ajax(我使用jquery).现在的情景是;

一个ajax调用是调用一个php脚本,它基本上是一个长时间运行的进程,它设置了一些会话变量.

稍后在某些时间间隔(比方说,每2秒)我运行另一个ajax调用来检查会话变量,以了解进程(第一个PHP脚本执行)何时完成.

第一个php脚本从数据库中获取数据并将其拧入文件中.在每个提取中,我计算循环数并将其存储到会话变量中以保留某种跟踪记录.喜欢;

 $i=0;
 $_SESSION['time']=date('m-d-Y H:i:s');
 while(...)
 {
     ini_set('session.use_only_cookies', false);
     ini_set('session.use_cookies', false);
     ini_set('session.use_trans_sid', false);
     ini_set('session.cache_limiter', null);
     session_start();
     $_SESSION['tracksatus']="loop number : ".$i." time is :"$_SESSION['time'];
     session_write_close();

     $i++;

     ......
     ......
 }
Run Code Online (Sandbox Code Playgroud)

我通过setIntervalajax 调用的另一个php脚本就是这样做的;

 echo $_SESSION['trackstatus']
Run Code Online (Sandbox Code Playgroud)

设定的间隔ajax让我回归;

  loop number 1 time is m-d-Y H:i:s
  loop number 5 time is m-d-Y H:i:s
  loop number 8 time is m-d-Y H:i:s
  ......
Run Code Online (Sandbox Code Playgroud)

然后再打几次电话;

  loop number 1 time is m-d-Y H1:i1:s1
  .....
Run Code Online (Sandbox Code Playgroud)

注意H:i:s的变化为H1:i1:s1

所以根据我的理解,php脚本正在调用两次.并且对于您的信息,相同的代码在12小时之前就可以正常工作.我之前遇到过这个问题,并以某种方式解决了它(试错,所以我不知道怎么样或者可能是自动的......好吧,实际上我没有线索).

能否请你告诉我我做错了什么?如果您需要更多信息,请提及.

有趣的是,它只是在询问了这个问题之后才按预期工作,甚至没有改变一行代码.但我想知道原因.

h0x*_*91B 3

我想我知道原因是什么,PHP 将会话变量写入文件,但它仅在脚本执行结束时才执行,因此在长脚本结束之前您无法看到另一个脚本中会话的更改。

您可以通过session_write_close(); session_start();在每次更改会话数据后添加来修复它。

session_write_close会将更改写入 HD,以便另一个脚本可以读取它。 session_start将从 HD 加载会话,但请确保您的另一个脚本没有对会话进行任何更改,这些更改将被您的长脚本覆盖。

如果您使用单独的域,还有一件事:在实际 AJAX 调用发生之前,您的浏览器会OPTIONS向同一 URL 发送请求以检查 CORS 标头。因此,在脚本开始时检查HTTP METHOD,如果它HEADOPTIONSmakedie();