Ajax Call применяет новый SessionID из PHP - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть два PHP-файла.

Первый: http://huntinggrounds.de/test/sessionToken.php открыть новый сеанс с помощью session_start () и иметь переменную $ _SESSION ['token'] = "123";

Делая выборку (ajax-вызов) для моего второго файла (formTest.php), я хотел бы вернуть этот $ _SESSION ['token']. Но это всегда больше не действует.

Я обнаружил, что всегда получаю новый SessionID. Что определенно не так.

Если я позвоню http://huntinggrounds.de/test/formTest.php, пройдите через браузер. Все правильно. Так что проблема должна быть в вызове ajax.

Вот источники: В стартовом файле sessionToken.php:

fetch(form.getAttribute("action"), {
        method: 'POST',
        headers: {
            'x-csrf-token': token,
            'Accept': 'application/json, text/plain, */*',
            'credentials': 'include'     
        },
        body: data      
 })

мой PHP-файл formTest.php

    <?php
    //session_id('joe');
    //session_start();
    if (session_status()==1) {
        session_start();  $sessionStart = "sessionNEU";
    }

    header('Access-Control-Allow-Methods: POST');
    header("X-Powered-By: joe");

    header("Access-Control-Allow-Headers: x-csrf-token, X-Requested-With"); 
    header("Access-Control-Expose-Headers: x-csrf-token");

    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Allow-Origin: *');
    header($_SERVER["SERVER_PROTOCOL"]." 200 Ok");
    header('Content-type: application/json');

    $response= array();
        $tokenNeu = generateToken(16);
    //$tokenAlt = $_SERVER['HTTP_X_CSRF_TOKEN'];
    $response["session"]["ID"] = session_id();
    $response["session"]["savePath"] = session_save_path();
    $response["session"]["startsNew"] = $sessionStart ? "yes" : "no";
    $response["session"]["hasToken"] = isset($_SESSION['token']) ? "yes" : "no";
    $response["session"]["token"] = $_SESSION['token'];
    $response["session"]["tokenValid"] = ($_SESSION['token'] == $_SERVER['HTTP_X_CSRF_TOKEN']) ? "valid" : "invalid";
    $response["session"]["tokenCSFR"] = $_SERVER['HTTP_X_CSRF_TOKEN'];
    $response["session"]["tokenNew"] = $tokenNeu;
echo json_encode($response);...  

Любая идея, что заставляет testForm.php дать новый SessionID.

(Когда я устанавливаю в обоих файлах session_id ('joe'); это работает как брелок)

Пожалуйста, не комментируйте, что session_start (); должен быть в первой строке. Это проверено и не проходит.

Я нахожусь на PHP7.

1 Ответ

0 голосов
/ 27 апреля 2018

Необходимо указать учетные данные внутри параметров, а не в заголовках, см. http://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

fetch(form.getAttribute("action"), {
        method: 'POST',
        headers: {
            'x-csrf-token': token,
            'Accept': 'application/json, text/plain, */*'
        },
        'credentials': 'include',
        body: data      
 })
...