使用ajax在浏览器中单击时破坏php会话

Posted

技术标签:

【中文标题】使用ajax在浏览器中单击时破坏php会话【英文标题】:Destroying php session when clicked back in browser with ajax 【发布时间】:2018-01-05 23:44:41 【问题描述】:

我有两个文件 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";
?>

是否有任何可能的方法来做我提到的上述事情,如果是,那么我应该在哪里我的 ajax 代码,在 booking.php 或 index.php !提前致谢

【问题讨论】:

PHP - Session_Destroy upon pressing Back button的可能重复 不,我需要 ajax 这样做,它不重复,我已经尝试过使用 php,但是 php 没有任何功能来捕获按下浏览器返回按钮的事件 【参考方案1】:

您必须在 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 来做!!! ,检测点击浏览器后退按钮的事件 您可以禁用浏览器缓存。 在注销页面的head标签中通过这种方式禁用浏览器缓存。 它会自动取消会话吗??【参考方案2】:

在你的 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 好吧,会话是服务器端,ajax 是客户端。您不能仅使用 ajax 进行会话。您必须向服务器发送请求以销毁或附加会话 这就是我在上面所做的,发送一个 ajax 请求,我想要的是当我按下浏览器的后退按钮时调用一个函数并且 ajax 在服务器上发送请求以销毁会话 @gANDALF 您需要检测用户是否按下了返回按钮,然后运行您的 ajax 代码而不是默认代码,甚至看看这个***.com/questions/17594413/…

以上是关于使用ajax在浏览器中单击时破坏php会话的主要内容,如果未能解决你的问题,请参考以下文章

当用户关闭浏览器而不单击注销时销毁或取消设置会话[重复]

注销后的 CodeIgniter 后退按钮

带有 '&' 的参数会破坏 $.ajax 请求

如何不让用户直接从AJAX使用的浏览器访问php文件?

如何注销单个帐户?

单击时如何将与 <a> 链接关联的值设置为会话变量