【发布时间】:2018-10-08 12:36:06
【问题描述】:
我有两个 PHP 文件。
第一个:http://huntinggrounds.de/test/sessionToken.php 通过 session_start() 打开一个新会话并具有变量 $_SESSION['token'] = "123";
通过获取(ajax 调用)到我的第二个文件(formTest.php),我想返回这个 $_SESSION['token']。 但这总是不再有效。
我检测到我总是得到一个新的 SessionID。什么是绝对错误的。
如果我通过浏览器拨打http://huntinggrounds.de/test/formTest.php direkt。一切都是正确的。所以问题一定是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。
【问题讨论】:
标签: javascript php ajax fetch fetch-api