[英]How to destroy PHP Sessions Using Javascript Ajax
我在我的网站上做了一个简单的登录功能。 我正在做的是,成功登录后,我使用session_start()
在php中进行会话,然后定义$_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();
}
您可以尝试的简单解决方案
session_start();
我们必须将其添加到php文件的顶部,否则php抛出异常,例如“已发送标头”或“无法启动会话”等。
因此有2个选项。1.添加session_start(); 在课堂上像
public
function destroySession() {
session_start();
session_unset();
session_destroy();
}
或2.只需添加session_start();
在切换之前 你的代码看起来像
if (isset($data)) {
$conn = new Database;
$db_conn = $conn - > connect();
session_start();
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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.