当我使用命令提示符执行我的php脚本时,我需要从cookie或会话中读取一些值。我怎样才能做到这一点?
如何从Windows命令提示符访问cookie或会话值?
答案 0 :(得分:10)
Cookie是从用户的网络浏览器发送的。从命令行执行php脚本时,没有浏览器可以发送或接收cookie。无法访问或保存cookie,除了您在命令行上传递的参数外,不会向脚本发送任何内容。
话虽如此,如果您知道他们的PHPSESSID cookie,有一种方法可以读取有浏览器的人已经访问的会话。
假设某人使用网络浏览器访问了您的脚本,并且他们的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,您的会话将在调用脚本之间保持不变。
答案 1 :(得分:2)
CLI中没有cookie,所以......是的。
您可以将所需的会话名称作为参数或环境变量传递,然后使用session_name()
在脚本中设置它。
答案 2 :(得分:0)
你应该试试这个:
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文件中设置。
您始终可以使用自定义路径加载会话。