Невозможно сохранить сессию PHP для последующих вызовов API после входа в системуPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно сохранить сессию PHP для последующих вызовов API после входа в систему

Сообщение Anonymous »

Цель: данные тестирования семян в моем приложении PHP через Cypress Framework в событии перед: запустить с помощью Axios. Запуск моего приложения и Cypress Framework локально. Мне нужно только посетить данные тестирования в моем приложении локально. . < /p>
Примечание 2: Мое приложение работает в браузере - нулевые проблемы. Вызовы API не используют phpsessid, предоставляемый методом входа в систему. Предполагается, что Axios автоматически сохранит PHPSessID от вызова входа в систему и отправит его с последующими вызовами, но это не так. Поэтому я не могу сохранить сеанс/оставаться вошел в систему, чтобы иметь возможность взаимодействовать с моим приложением в любом другом отношении, чем войти в систему.
Это сравнение первого вызова и второго вызова Полем Действие, отправленные заголовки, полученные заголовки, данные.

Код: Выделить всё

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
}
Call to https: //localhost/xyz/php/apis/invitations.php

Код: Выделить всё

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"]
)
);
}
apis/invitations.php

Код: Выделить всё

require($_SERVER["DOCUMENT_ROOT"]."/xyz/php/meta/session_configuration.php");

if ($_SERVER["REQUEST_METHOD"] == "GET" && !isset($_SESSION["loggedIn"])) {
header("Location: ../pages/log_in.php");
exit;
}

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"]);
}

$action = $_POST["action"];

echo json_encode(
array(
"PHP > logged in?" => isset($_SESSION["loggedIn"])
)
);

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 
to true .
[*] Добавленные axios.interceptors.request.use Чтобы допросить, что отправляется.
Добавлено журналы консоли, чтобы опросить, что получено.

Код: Выделить всё

import axios from 'axios'
axios.defaults.withCredentials = true

axios.interceptors.request.use(
(config) => {
console.log('Sent headers:', config.headers)
return config
},
(error) => {
return Promise.reject(error)
}
)

export const enum ApiCallMethods {
POST
}

export default class ApiUtilities {
static async callApi(url: string, callMethod: ApiCallMethods, data: object): Promise {
let response

try {
switch (callMethod) {
case ApiCallMethods.POST:
response = await axios.post(url, data, {
headers: {
'Content-Type': 'application/json'
}
})
break
}

console.log('Received headers:', response.headers)
console.log('Data:')
console.log(response.data)

return response.data
} catch (error) {
throw error
}
}

static async logIn() {
await this.callApi('https://localhost/xyz/php/apis/users.php', ApiCallMethods.POST, {
action: 'log_in',
username: 'censored',
password: 'censored'
})
}
}
[*] Добавлено .htaccess файл в мое приложение для реализации заголовков (перезапущенный Apache, чтобы убедиться, что изменения вступили в силу).

Код: Выделить всё

# 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

Код: Выделить всё

    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();
}
[/list]
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/794 ... logging-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Распараллелить список последующих вызовов API в Python
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Распараллелить список последующих вызовов API в Python
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Параллелизуйте список последующих вызовов API в Python
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Распараллелить список последующих вызовов API в Python
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Сохраняет ли Clearscript ScriptEngine код для последующих вызовов Execute?
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»