如何使用 Javascript Ajax 销毁 PHP 会话

纳迪姆·艾哈迈德

我正在我的网站上制作一个简单的登录功能。我正在做的是,当登录成功时,我使用 php 在 php 中创建一个会话session_start(),然后我定义$_SESSION存储用户数据的变量。并且该$_SESSION数据已发送以响应对登录进行的 ajax 调用。登录成功,但是当我尝试注销用户时,我会在单击注销按钮时简单地发送一个 ajax 请求。在那里session_unset()session_destroy()已被调用。我立即想销毁我在登录时所做的会话,但它给了我错误:Trying to destroy uninitialized session; 我不知道可能是什么问题,我在这里关注了一些问题,但无法解决问题。

AJAX 调用

$(document).on("click", "#logout", function(e) {
  fetch("Models/auth.php", {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      "model": "auth",
      "action": "logout",
      "data": null
    })
  }).then(function(t) {
    t.text().then(function(res) {
      console.log(res);
      // if(r.success){
      //     location.href = "register.html";
      // }
    })
  })
})

PHP

class Globals {

  public
  function makeSession($email, $id, $auth_key, $online, $session) {
    if (!isset($_SESSION)) {
      session_start();
      $_SESSION["user_email"] = $email;
      $_SESSION["user_id"] = $id;
      $_SESSION["user_key"] = $auth_key;
      $_SESSION["user_online"] = $online;
      $_SESSION["user_session"] = $session;
    }
  }

  public
  function destroySession() {
    session_unset();
    session_destroy();
  }


}

if (isset($data)) {

  $conn = new Database;
  $db_conn = $conn - > connect();

  switch ($data - > model) {
    case "auth":
      {
        $auth = new Auth(json_decode($data - > data), $data - > action);
        switch ($data - > action) {
          case "register":
            {
              $auth - > registerUser($db_conn);
              break;
            }
          case "login":
            {
              $auth - > loginUser($db_conn);
              break;
            }
          case "logout":
            {
              $g = new Globals();
              //Call to destroy The Sessions
              $g - > destroySession();
              echo json_encode(array("success" => true, "action" => "logout"));
              break;
            }
        }
        break;
      }
  }

}

保罗德里格斯

为了销毁会话的数据,您需要初始化/恢复会话,否则您将无法获取会话。所以你需要打电话session_start()

所以试试这个代码:

 public function destroySession() {
    session_start();
    session_unset();
    session_destroy();
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章