通过命令提示符执行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加载会话。