点击浏览器返回按钮时使用ajax销毁php会话

3

我有两个文件index.php(第一个)和booking.php(第二个),当有人从booking.php移动到index.php时,我希望会话被销毁。

到目前为止,我尝试使用ajax销毁会话。

这是我的booking.php文件中相关的代码:

$(window).on("popstate", function (event, state) {

    $.ajax({
          type: 'GET',
          url: 'logout.php',
          async:yes,
          success: function(msg) {
              if (msg == 'loggedOut') {
            window.location.href = 'index.php';
              }
          }
      });
    });

这是我的logout.php文件:

<?php
session_start();
session_destroy();
echo "loggedOut";
?>

我提到的上述事情有可能有任何方法可以实现吗?如果是,那么我应该在booking.php或index.php中放置我的ajax代码!提前感谢。


可能是PHP-按下后退按钮时的Session_Destroy的重复问题。 - PL200
不,我需要使用ajax来实现,这不是重复的问题。我已经尝试过使用php,但是php没有任何函数可以捕获浏览器返回按钮的事件。 - user8388852
2个回答

0

你需要在你的 PHP 文件中重置会话 ID。

session_start(); // fetch OR re-start current session

session_regenerate_id(true); // Update the current session id with a newly generated one

$_SESSION=array(); // empty session data

session_write_close(); // Write session data and end session

我知道如何做,可以轻松使用它取消会话,我的问题是如何在检测到单击浏览器后退按钮的事件时使用ajax实现它! - user8388852
您可以禁用浏览器缓存。 - vjy tiwari
在注销页面的头部标签中,通过以下方式禁用浏览器缓存。<meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Tue, 01 Jan 2000 1:00:00 GMT" /> <meta http-equiv="pragma" content="no-cache" /> - vjy tiwari
它会自动取消会话吗? - user8388852

0
在您的booking.php文件中添加以下内容。
$_SESSION["booking_page"] =true;

在你的index.php文件中。
if(isset($_SESSION["booking_page"]) &&  $_SESSION["booking_page"]===true){
$_SESSION["booking_page"]=false;
//your logout code here; 
}

所以,发生的情况是...如果索引页面来自预订页面,您可以检测到它并在此之后执行任何操作。

@gANDALF 嗯,Session 是服务器端的,而 Ajax 是客户端的。你不能仅使用 Ajax 来处理 Session。你必须向服务器发送请求来销毁或追加 Sessions。 - lijnam
这就是我上面所做的,发送一个ajax请求,我想要的是当我按浏览器的返回按钮时调用一个函数,并且ajax向服务器发送请求以销毁会话。 - user8388852
@gANDALF 你需要做的是检测用户是否按下了返回按钮,然后运行你的ajax代码而不是默认事件。 看一下这个链接:https://dev59.com/Q2Mm5IYBdhLWcg3wdu1V - lijnam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接