【问题标题】:access session variable during 2nd request to server在对服务器的第二次请求期间访问会话变量
【发布时间】:2022-01-22 07:15:11
【问题描述】:

我正在努力在 php.ini 中创建一个 csv 文件。调用将使用 ajax 发起。如果有更多行,则创建 csv 文件可能需要更多时间。同时,我尝试通过发起另一个 ajax 请求来使用取消来停止创建。我创建 csv 文件的初始代码是:

for ($i=0; $i < count($result); $i++) 
{ 
  fputcsv($file_path,$result[$i]);
}

为了通过第二个 ajax 请求停止此循环,我决定使用名为 csv_creation 的会话变量。在创建过程中,我使用 session_start() 开始会话,$_SESSION['csv'] 值将开始,单击取消后,其值将结束。通过每次在循环内检查会话变量,我将决定是继续写入还是停止写入。现在我的代码是:

for ($i=0; $i < count($result); $i++) 
{ 
  if ($_SESSION['csv'] === "end") {
    return "stop_csv";
  }
  fputcsv($file_path,$result[$i]);
}

我的问题是单击取消时,我使用 session_start() 再次启动会话并将值分配为 $_SESSION['csv'] = "end",但是此会话直到循环完成才开始,之前在创建 .csv。所以我无法阻止循环执行。 关于如何处理这个关于停止循环的问题有什么建议吗?

【问题讨论】:

  • 只是不要开始一个新的会话,也许?
  • Martin Zeitler - 主页没有任何会话。请求转到新页面,所以我每次请求都必须启动一个新会话。
  • 好吧,看来您已经意识到问题所在了;无论页面如何,您都需要保持相同的会话处于活动状态;一个与另一个无关;这是跨页面传输数据的目的——因此每个页面都需要维护它。通过 XHR 触发导出槽最终可能会更优雅。

标签: php ajax


【解决方案1】:

你的主要问题是:

  • 一个 php 脚本对另一个脚本一无所知。
  • PHP 脚本以某些参数和某些会话开头,并且不共享。

因此,当您在新脚本中更改会话时,它不会影响旧脚本。

您可以尝试另一种解决方案:将其存储在数据库或特殊文件(或标志文件)中。

【讨论】:

  • 是的,我想在我的情况下我必须使用标志文件。谢谢你的解释。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多