通过命令提示符执行PHP5脚本时是否可以读取cookie / session值?
当我使用命令提示符执行我的php脚本时,我需要从cookie或会话中读取一些值。 我怎样才能做到这一点?
如何从Windows命令提示符访问cookie或会话值?
Cookies是从用户的networking浏览器发送的。 当你从命令行执行一个php脚本时,没有浏览器发送或接收cookie。 除了在命令行上传递的参数以外,没有办法访问或保存cookie,也不会向脚本发送任何内容。
这就是说,如果你知道他们的PHPSESSID cookie,那么有一种方式可以阅读某个浏览器的用户已经访问过的会话。
假设有人通过networking浏览器访问了您的脚本,并且他们的PHPSESSID是a1b2c3d4,并且您想要在他们的会话中执行该脚本。 在命令行执行以下命令。
php -r '$_COOKIE["PHPSESSID"] = "a1b2c3d4"; session_start(); require("path_to_php_script.php");'
其中path_to_php_script.php是要执行的PHP脚本的path。 实际上,如果要执行的php文件自己开始会话,则不必启动会话。 所以,你可能想要真正尝试这个命令:
php -r '$_COOKIE["PHPSESSID"] = "a1b2c3d4"; require("path_to_php_script.php");'
好的,现在让我们假设你不想访问某个人的会话,但是你只想执行脚本,就好像你已经有一个会话一样。 只要执行前面的命令,但是放入你想要的任何sessionid。 而且,只要每次调用脚本时使用相同的PHPSESSID,您的会话将在对脚本的调用之间保持不变。
在CLI中没有cookies,所以…是的。
您可以将所需的会话名称作为参数或环境variables传递,然后使用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文件中设置的“默认”path。
您始终可以使用自定义path加载会话。