【发布时间】:2019-08-05 07:17:04
【问题描述】:
我正在创建一个在后台运行的 php 脚本。脚本完成后,我希望它更改从 Web 界面启动的会话中的标志。我尝试将会话 id 传递给脚本并使用 id 启动同一个会话,但它一直在循环。
我尝试将会话 id 传递给脚本并使用 id 启动相同的会话,但它不起作用。
WebInterface.php
$_SESSION["flag"] = false;
shell_exec("php BackgroundScript.php ".session_id()." &");
BackgroundScript.php
$id = $argv[1];
session_id($id);
session_start();
//do things
$_SESSION["flag"] = true;
当我尝试初始化会话时,代码似乎没有完成。
【问题讨论】:
-
会话 ID 通常存储在浏览器 cookie 中。然后,您切换到一个完全不同的环境,即命令行,它不支持 cookie。您尝试通过提供会话 ID 来解决这个问题。当您调用
session_start()时,脚本会在后台尝试重新生成cookie。请参阅session_id() 的注释。但不支持 cookie。我不知道这是否可行。无论如何,我的观点是,从 with cookie 切换到 without 可能是个坏主意。为什么不完全尝试不使用 cookie? -
除了会话之外,PHP 脚本之间还有其他方式进行通信。显而易见的是数据库,但您也可以直接使用文件系统。
-
@KIKOSoftware 我目前正在从会话文件中获取数据并写回它,它按预期工作。由于我尝试实现的功能取决于会话标志,因此我正在寻找一种替代方法来修改会话值。感谢您的 cmets。