Цель: данные тестирования семян в моем приложении PHP через Cypress Framework в событии перед: запустить с помощью Axios. Запуск моего приложения и Cypress Framework локально. Мне нужно только посетить данные тестирования в моем приложении локально. . < /p>
Примечание 2: Мое приложение работает в браузере - нулевые проблемы. Вызовы API не используют phpsessid, предоставляемый методом входа в систему. Предполагается, что Axios автоматически сохранит PHPSessID от вызова входа в систему и отправит его с последующими вызовами, но это не так. Поэтому я не могу сохранить сеанс/оставаться вошел в систему, чтобы иметь возможность взаимодействовать с моим приложением в любом другом отношении, чем войти в систему.
Это сравнение первого вызова и второго вызова Полем Действие, отправленные заголовки, полученные заголовки, данные.
# Allow CORS for all paths in your application
Header set Access-Control-Allow-Origin "http://localhost/xyz"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Headers "Content-Type, Authorization, Cookie"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
# Handle OPTIONS preflight requests
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ - [R=200,L]
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
< /code>
< /li>
Реализовано https в моем приложении, чтобы я мог тогда реализовать SameSite = none. < /p>
meta/session_configuration.php
Цель: данные тестирования семян в моем приложении PHP через Cypress Framework в событии перед: запустить с помощью Axios. Запуск моего приложения и Cypress Framework локально. Мне нужно только посетить данные тестирования в моем приложении локально. . < /p> Примечание 2: Мое приложение работает в браузере - нулевые проблемы. Вызовы API не используют phpsessid, предоставляемый методом входа в систему. Предполагается, что Axios автоматически сохранит PHPSessID от вызова входа в систему и отправит его с последующими вызовами, но это не так. Поэтому я не могу сохранить сеанс/оставаться вошел в систему, чтобы иметь возможность взаимодействовать с моим приложением в любом другом отношении, чем войти в систему. Это сравнение первого вызова и второго вызова Полем Действие, отправленные заголовки, полученные заголовки, данные.[code]Logging in... Sent headers: Object [AxiosHeaders] { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json' } Received headers: Object [AxiosHeaders] { date: 'Tue, 04 Feb 2025 20:26:22 GMT', server: 'Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12', 'x-powered-by': 'PHP/8.2.12', 'set-cookie': [ 'PHPSESSID=gp9329kmpfili2r49rl3hqc3no; expires=Tue, 04 Feb 2025 21:26:22 GMT; Max-Age=3600; path=/; secure; HttpOnly; SameSite=None' ], expires: 'Thu, 19 Nov 1981 08:52:00 GMT', 'cache-control': 'no-store, no-cache, must-revalidate', pragma: 'no-cache', 'access-control-allow-origin': 'http://localhost/xyz', 'access-control-allow-credentials': 'true', 'access-control-allow-headers': 'Content-Type, Authorization, Cookie', 'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS', 'content-length': '100', 'keep-alive': 'timeout=5, max=100', connection: 'Keep-Alive', 'content-type': 'text/html; charset=UTF-8' } Data: { ResponseType: 'redirect', URL: 'http://localhost/xyz/php/pages/games.php', 'logged in:': true } [/code] Call to https: //localhost/xyz/php/apis/invitations.php [code]Subsequent API call... Sent headers: Object [AxiosHeaders] { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json' } Received headers: Object [AxiosHeaders] { date: 'Tue, 04 Feb 2025 20:26:22 GMT', server: 'Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12', 'x-powered-by': 'PHP/8.2.12', 'set-cookie': [ 'PHPSESSID=00demprhj3anp6ketbvlkpo36e; expires=Tue, 04 Feb 2025 21:26:22 GMT; Max-Age=3600; path=/; secure; HttpOnly; SameSite=None' ], expires: 'Thu, 19 Nov 1981 08:52:00 GMT', 'cache-control': 'no-store, no-cache, must-revalidate', pragma: 'no-cache', 'access-control-allow-origin': 'http://localhost/xyz', 'access-control-allow-credentials': 'true', 'access-control-allow-headers': 'Content-Type, Authorization, Cookie', 'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS', 'content-length': '26', 'keep-alive': 'timeout=5, max=99', connection: 'Keep-Alive', 'content-type': 'text/html; charset=UTF-8' } Data: { 'PHP > logged in?': false } < /code> Как вы можете видеть, phppsssids отличаются, но теоретически второй должен быть таким же, как и первый. < /p> Данные 'Выходы - это отладка: classes/users.php public function logIn($userName, $password) { // irrelevant logic here echo json_encode( array( "ResponseType" => "redirect", "URL" => $redirectURL, "logged in:" => $_SESSION["loggedIn"] ) ); } [/code] apis/invitations.php [code]require($_SERVER["DOCUMENT_ROOT"]."/xyz/php/meta/session_configuration.php");
require_once("../classes/validators.php"); require_once("../classes/invitations.php"); $validatorsObject = new Validator(); $invitationObject = new Invitation();
if ($_SERVER["REQUEST_METHOD"] == "POST") { $_POST = get_object_vars(json_decode(file_get_contents("php://input")));
// to process data from non-browser sources if (array_key_exists("body", $_POST)) { $_POST = get_object_vars($_POST["body"]); }
if (isset($_SESSION["loggedIn"]) && $_SESSION["loggedIn"]) { switch ($action) { case "create_invitation": if (($_POST["type_of_invitation"] == "game" && $validatorsObject->validateUserInput($_POST["players_to_invite"])) || ($_POST["type_of_invitation"] == "automatic_game_agreement" && $validatorsObject->validateUserInput($_POST["players_to_invite"]) && $validatorsObject->validateUserInput(array("games_to_create" => $_POST["games_to_create"])))) { $inviterId = isset($_POST["inviter_id"]) ? $_POST["inviter_id"] : ''; $invitationObject->createInvitation($_POST["players_to_invite"], $_POST["type_of_invitation"], $_POST["games_to_create"], $inviterId); } break; } } } < /code> Второй не может даже нажать CreateInvitation (), потому что он не вошел в систему, потому что он использует неправильный phpsessid. < /p> Я пробовал: < /p> [list] [*] Cypress Framework> api-utility.ts < /code> < /p>
Установить axios.defaults.withcredentials [/code] to true . [*] Добавленные axios.interceptors.request.use Чтобы допросить, что отправляется. Добавлено журналы консоли, чтобы опросить, что получено.[code]import axios from 'axios' axios.defaults.withCredentials = true
[*] Добавлено .htaccess файл в мое приложение для реализации заголовков (перезапущенный Apache, чтобы убедиться, что изменения вступили в силу). [code]# Allow CORS for all paths in your application Header set Access-Control-Allow-Origin "http://localhost/xyz" Header set Access-Control-Allow-Credentials "true" Header set Access-Control-Allow-Headers "Content-Type, Authorization, Cookie" Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
# Handle OPTIONS preflight requests
RewriteEngine On RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ - [R=200,L]
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
< /code> < /li> Реализовано https в моем приложении, чтобы я мог тогда реализовать SameSite = none. < /p> meta/session_configuration.php[/code] [code] if (session_status() === PHP_SESSION_NONE) { session_set_cookie_params([ 'lifetime' => 3600, // 1 hour 'path' => '/', 'secure' => true, // Only sent over HTTPS 'httponly' => true, // Prevent access from JavaScript 'samesite' => 'None', // Allow cross-site cookies ]); session_start(); } [/code]
У меня есть код, который циклически просматривает некоторые файлы, а затем выполняет последующие вызовы «цепочки» из нескольких API, используя содержимое каждого файла, причем каждому API для запуска необходимы выходные данные предыдущего.
/>files =...
У меня есть код, который циклически просматривает некоторые файлы, а затем выполняет последующие вызовы «цепочки» из нескольких API, используя содержимое каждого файла, причем каждому API для запуска необходимы выходные данные предыдущего.
/>files =...
У меня есть код, который циклически просматривает некоторые файлы, а затем выполняет последующие вызовы «цепочки» из нескольких API, используя содержимое каждого файла, причем каждому API для запуска необходимы выходные данные предыдущего.
/>files =...
У меня есть код, который циклически просматривает некоторые файлы, а затем выполняет последующие вызовы «цепочки» из нескольких API, используя содержимое каждого файла, причем каждому API для запуска необходимы выходные данные предыдущего.
/> files...
var SharedJSLibrary = bla ; var специфичныйDownstreamScript = bla2 ; scriptEngine.Execute(sharedJSLibrary); scriptEngine.Execute(специфическийDownstreamScript); Сохраняют ли механизмы ClearScript код для использования в последующих вызовах Execute?...