当某个登录用户运行scriptA.php时,反过来会使用system()或exec()调用另一个scriptB.php。
scriptB.php是否有可能首先获取运行scriptA.php的用户的SESSION数据的参数? 谢谢!
答案 0 :(得分:2)
不,你不能用传统方式(使用$_SESSION
)来做。最好的方法是将数据作为参数传递给CLI命令,或将其写入STDIN
(并在scriptB.php
中读取)。
如果您有权限,您还可以去阅读会话文件(如果您正在处理文件中的会话)......但这并不可取。
答案 1 :(得分:1)
如果您的问题与安全问题有关:
我倾向于拒绝。第二个脚本无法访问第一个脚本中的任何变量。
BUT。如果服务器(非常)错误配置,脚本B可以尝试从PHP使用的临时会话目录(php.ini中的session.save_path)访问序列化会话数据。
如果你想在脚本A和脚本B之间传递数据,你可以用其他方法来做,比如FIFO,stdin等。虽然我不明白为什么你想用另一个脚本执行一个脚本EXEC()。
答案 2 :(得分:1)
如果您使用的是基于标准文件的会话,那么您可以让父脚本将会话的ID作为命令行参数传递给子脚本,例如
shell_exec('php scriptB.php ' . session_id());
然后在scriptB中检索该ID:
session_id($argc[1]); // argc contains command line args.
session_start();
我从未尝试在命令行脚本中启动会话,因此您可能必须处理cookie错误等。但即使您不能使用session_start(),您也可以直接访问会话文件并对其进行反序列化,这将是以下内容:
$sess_path = session_save_path() . '/sess_' . $argc[1];
$serialized = file_get_contents($sess_file);
$_SESSION = unserialize($serialized);
对于其他会话系统,例如数据库,您将访问数据库而不是弄乱文件。