【发布时间】:2011-11-26 13:47:22
【问题描述】:
当我使用命令提示符执行我的 php 脚本时,我需要从 cookie 或会话中读取一些值。我怎样才能做到这一点?
如何从 Windows 命令提示符访问 cookie 或会话值?
【问题讨论】:
-
Cookie 在 CLI 环境中没有意义?
标签: php command-line command nant
当我使用命令提示符执行我的 php 脚本时,我需要从 cookie 或会话中读取一些值。我怎样才能做到这一点?
如何从 Windows 命令提示符访问 cookie 或会话值?
【问题讨论】:
标签: php command-line command nant
Cookie 是从用户的网络浏览器发送的。当您从命令行执行 php 脚本时,没有浏览器可以发送或接收 cookie。无法访问或保存 cookie,除了您在命令行中传递的参数外,不会向脚本发送任何内容。
话虽如此,如果您知道他们的 PHPSESSID cookie,则有一种方法可以读取使用浏览器的人已经访问过的会话。
假设有人使用 Web 浏览器访问了您的脚本,并且他们的 PHPSESSID 是 a1b2c3d4,并且您希望通过他们的会话执行该脚本。在命令行执行以下命令。
php -r '$_COOKIE["PHPSESSID"] = "a1b2c3d4"; session_start(); require("path_to_php_script.php");'
其中 path_to_php_script.php 是您要执行的 php 脚本的路径。实际上,如果您要执行的 php 文件启动会话本身,则您不必启动会话。所以,你可能想实际尝试一下这个命令:
php -r '$_COOKIE["PHPSESSID"] = "a1b2c3d4"; require("path_to_php_script.php");'
好的,现在假设您不想访问某人的会话,但您只想像已经有会话一样执行脚本。只需执行前面的命令,但输入任何你想要的 sessionid。只要您每次调用脚本时使用相同的 PHPSESSID,您的会话将在调用脚本之间保持不变。
【讨论】:
CLI 中没有 cookie,所以...是的。
您可以将所需的会话名称作为参数或环境变量传递,然后使用session_name() 在您的脚本中进行设置。
【讨论】:
你应该试试这个:
exec('php -r \'$_COOKIE["'.session_name().'"]="'.$_COOKIE[session_name()].'";include("file_path.php");\'');
然后在您的脚本上执行以下操作:
session_start();
@session_decode(@file_get_contents(session_save_path().'/sess_'.$_COOKIE[session_name()]));
现在您已经准备好使用会话了!
请记住,函数 session_save_path() 将获得“默认”路径,在 .ini 文件中设置。
您始终可以使用自定义路径来加载会话。
【讨论】:
$_SESSION 内容写回磁盘完成。实际上,他只需要设置会话 ID,然后调用 session_start()。至少在 Xampp (Windows) 下,我可以顺利地工作。但是,我在 Linux 下的所有尝试都失败了。我没有花足够的时间知道为什么。要记住的另一件事是,当会话被 CLI 锁定时,具有该会话的浏览器用户可能正在等待。