【问题标题】:Can I continue existing session on script in background and modigy the values?我可以在后台继续现有脚本会话并修改值吗?
【发布时间】: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。

标签: php session nginx


【解决方案1】:

您可以尝试假装会话 cookie 存在,如下所示:

WebInterface.php

$_SESSION["flag"] = false;
shell_exec("php BackgroundScript.php ".session_id()." &");

BackgroundScript.php

$id = $argv[1];
$_COOKIE["PHPSESSID"] = $id;
session_start();
//do things
$_SESSION["flag"] = true;

这在某些情况下可能有效,但也可能无效。

见:https://stackoverflow.com/a/7578766/3986005

我认为更好的解决方案是通过数据库或文件进行通信。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多