我正在我的网站上制作一个简单的登录功能。我正在做的是,当登录成功时,我使用 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] 删除。
我来说两句