Мне нужно прочитать некоторые значения из cookie или сессии, когда я выполняю свой PHP-скрипт с помощью командной строки. Как я могу это сделать?
Как получить доступ к файлу cookie или значению сеанса из командной строки Windows?
Файлы cookie отправляются из веб-браузера пользователя. Когда вы выполняете скрипт php из командной строки, браузер не может отправлять или получать файлы cookie. Невозможно получить доступ или сохранить файлы cookie, и ничего не отправлено в скрипт, кроме параметров, которые вы передаете в командной строке.
При этом есть способ прочитать сеанс, когда кто-то с браузером уже получил доступ, если вы знаете свой файл cookie PHPSESSID.
Предположим, кто-то получил доступ к вашему скрипту с помощью веб-браузера, а их 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");'
Хорошо, теперь предположим, что вы не хотите получать доступ к чей-то сессии, но просто хотите выполнить сценарий, как если бы у вас уже был сеанс. Просто выполните предыдущую команду, но введите любой сеанс, который вы хотите. И ваша сессия останется неповрежденной между вызовами сценария, если вы используете один и тот же 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-файлах.
Вы всегда можете использовать настраиваемый путь для загрузки сеанса.