我需要从将在后台运行的主脚本调用 php 脚本(我只想调用并继续而不等待响应)但我需要访问被调用脚本中的用户会话
4 回答
我的建议是不要使用默认的 PHP 会话,因为使用后台进程可能会很棘手......我会推荐session_set_save_handler
http://www.php.net/manual/en/function.session-set-save-handler。用于数据库基础会话的php
这里有一个很好的例子http://www.php.net/manual/en/function.session-set-save-handler.php#96305
称呼
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
$maxlen =0;
在文件名中,您可以提供 url。在该 url 中传递会话 ID,并在调用的脚本中使用 session_id() 设置会话 ID,然后调用 session_start()。
确保调用脚本使用flush() 和ob_flush() 返回至少520 个虚拟字符,这样调用脚本就不会等待。
“会话”背后的全部意义在于,用户客户端可以以“无状态”方式多次连接到服务器,但仍像单个连接一样保持“状态”。“会话”数据在来自同一用户客户端的多个连接之间共享。
当您在服务器上生成后台进程时,无论您是否使用 PHP,“会话”都不再具有任何实际意义。用户甚至可以在不影响服务器后台进程的情况下关闭他的客户端机器。
考虑到这一点,使用其他地方建议的 Cookie 是完全没用的。Cookies 保存在客户端机器上,后台进程对它的访问权限为零。
如果有您的后台进程需要的客户端信息,那么调用进程需要以某种方式将其作为某种参数或某种数据文件传递给后台进程。
我建议将“$_SESSION”变量作为 Json 编码的数据字符串保存到临时文件中。后台进程可以读取该文件,将其 Json 解码回一个数组,然后就像它仍然是 $_SESSION 一样使用它。然后删除临时文件。
$_COOKIE['PHPSESSID'] = 'user_session_id';//Transfer parameters through $GLOBALS['argv']
session_start();