Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Php和fetch-刷新后未存储会话变量_Javascript_Php_Session_Fetch - Fatal编程技术网

Javascript Php和fetch-刷新后未存储会话变量

Javascript Php和fetch-刷新后未存储会话变量,javascript,php,session,fetch,Javascript,Php,Session,Fetch,前提:这在MAMP本地环境下运行完全正常。 我有一个经典的设置,通过在验证表单中输入的信息后设置会话来验证用户 这些文件是3个: index.php-->启动会话并检查会话变量“userId”是否存在。 如果没有,它会显示一个要登录的菜单 Register.js-->包含要注册和登录的js函数的文件。这两个函数都使用Fetch将数据发布到phpapi端点 signin.php--?获取发布的信息,检查用户名和密码是否正确,然后创建会话变量并将其作为响应回显 响应按照预期到达fetch请求(我已经

前提:这在MAMP本地环境下运行完全正常。

我有一个经典的设置,通过在验证表单中输入的信息后设置会话来验证用户

这些文件是3个: index.php-->启动会话并检查会话变量“userId”是否存在。 如果没有,它会显示一个要登录的菜单

Register.js-->包含要注册和登录的js函数的文件。这两个函数都使用Fetch将数据发布到phpapi端点

signin.php--?获取发布的信息,检查用户名和密码是否正确,然后创建会话变量并将其作为响应回显

响应按照预期到达fetch请求(我已经通过将会话变量传递给响应对象和控制台进行了验证。将其记录在index.php上),但是当我刷新页面时,会话变量就消失了

=====================

php在页面顶部启动会话。 编辑:在下面添加了文件

<?php session_start();
  print_r($_SESSION); // This prints an empty array.
?>
<html>
  <head>
    <!-- Irrelevant -->
  </head>
  <body>
    <div id='main'>
      <div class='logo'>
      </div>
      <div class='searchContainer'>
        <!-- Irrelevant -->
      </div>
    <?php
    if (isset($_SESSION["userId"])){

    ?>
    <!-- Logged in menu --> 
      <div class=menuContainer>
        <!-- Irrelevant -->
      </div>
      <dialog class="nes-dialog is-rounded grrr-dialog" id="dialogAddRage">
        <!-- Irrelevant -->
      </dialog>
    <?php } else { ?>
    <!-- Logged out menu --> 
      <div class=menuContainer>
        <!-- Irrelevant -->
      </div>
      <dialog class="nes-dialog is-rounded grrr-dialog" id="dialogSignup">
        <!-- Irrelevant -->
      </dialog>
      <dialog class="nes-dialog is-rounded grrr-dialog" id="dialogSignin">
        <!-- Irrelevant -->
      </dialog>
    <?php } // else ?>
      <div align=center class="masonry-wrapper">
        <!-- Irrelevant -->
      </div>
      <div id="picModal" class="modal">
          <!-- Irrelevant -->
      </div>
      <section class="message-list">
        <!-- Irrelevant -->
      <section>
        <div id='footer'>
          <!-- Irrelevant -->
        </div>
      </section>
    </div> <!-- close main -->
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <script src="js/dialog-polyfill.js"></script>
    <script src="js/jquery-3.4.1.min.js"></script>
    <script src="js/core.js"></script>
    <script src="js/register.js"></script>
    <script src="js/fetch_functions.js"></script>
    <script src="js/add_rage.js"></script>
  </body>  
</html>



signin.php

<?php
include_once 'db_connections.php';
$responseObj = new stdClass();
if (isset($_POST['name_field_signin'])){
    $userCheck = FALSE; //very simple query
    $sql = ("SELECT username, password, user_id FROM users");
    $result = $dbh->query($sql);
    while ($row = $result->fetch()){
        if ($_POST['name_field_signin'] == $row[ 'username'] && md5($_POST['password_field_signin']) == $row[ 'password'] ){
            $user_id = $row[ 'user_id'];
            $userCheck = TRUE;
            break;
        }
    }
    if ($userCheck){
        $_SESSION["userId"]=$user_id;
        $_SESSION["username"]=$_POST['name_field_signin'];
        $responseObj->status = 'signin-success';
        $responseObj->userId = $_SESSION["userId"];
    }
    else{
        $responseObj->status = 'signin-error';
    }
}
else{
    $responseObj->status = 'call-error';
}
$responseJSON = json_encode($responseObj);
echo $responseJSON;

我没看到你打电话来。这可能与此有关。此外,我还将编写一个概念证明,测试您是否可以在会话中保存某些内容并检索它。如果失败,请检查PHP进程是否可以写入会话。如前所述,我调用index.PHP顶部的session_start()。如果该文件已经无法实现这一点,您将如何进一步测试会话存储?您声明脚本在顶部调用了
session\u start()
,但没有显示它
session_start()
可能会自动失败,可能是因为在调用
session_start()
之前,脚本无意中输出了空格或其他字符。除非我们能看到你的整个剧本,否则我们永远不会知道。至于测试,我将编写一个独立的PHP脚本,调用
session\u start()
,并在会话中保存一些内容。编写另一个独立脚本,调用
会话\u start()
并读取会话中的内容。如果这样做行得通,那么会话就不是问题了。我添加了索引的提取,没有了不相关的html片段。我还测试了另一个文件中的会话,它看起来确实像预期的那样保存了下来,所以我这里肯定遗漏了一些东西。另外,请将
session\u start()
放在
signin.php
的开头。
<?php
include_once 'db_connections.php';
$responseObj = new stdClass();
if (isset($_POST['name_field_signin'])){
    $userCheck = FALSE; //very simple query
    $sql = ("SELECT username, password, user_id FROM users");
    $result = $dbh->query($sql);
    while ($row = $result->fetch()){
        if ($_POST['name_field_signin'] == $row[ 'username'] && md5($_POST['password_field_signin']) == $row[ 'password'] ){
            $user_id = $row[ 'user_id'];
            $userCheck = TRUE;
            break;
        }
    }
    if ($userCheck){
        $_SESSION["userId"]=$user_id;
        $_SESSION["username"]=$_POST['name_field_signin'];
        $responseObj->status = 'signin-success';
        $responseObj->userId = $_SESSION["userId"];
    }
    else{
        $responseObj->status = 'signin-error';
    }
}
else{
    $responseObj->status = 'call-error';
}
$responseJSON = json_encode($responseObj);
echo $responseJSON;