【问题标题】:jQuery PHP session_destroyjQuery PHP session_destroy
【发布时间】:2013-03-12 14:25:48
【问题描述】:

我正在尝试调用一个 php 脚本来破坏会话并在它之后重新加载页面。

$(document).bind("active.idleTimer", function(){
  $.post("data.php?data=active");
  location.reload();
});

数据.php

if($_GET['data'] == 'active') {
  session_destroy();
}

它不会破坏会话,只有当我手动打开 url data.php?data=active 时它才会这样做,这是为什么呢?谢谢!

【问题讨论】:

  • 你的data.php中有session_start()吗?
  • 我认为你需要在销毁之前使用 session_start() 初始化会话

标签: php jquery session


【解决方案1】:

问题在于您向其发送请求的脚本正在使用它自己的会话。所以,用户有一个会话,它不同于你发送“刷新空闲状态”请求的会话。

一种解决方案是使用 javascript 启动一个计时器,当计时器用完时,只需刷新页面。

这就是为什么它只在您实际访问 data.php 页面时才有效。

【讨论】:

  • 说实话我不太明白这个答案:为什么你发送请求的脚本要使用它自己的会话?两者共享相同的会话 cookie,因此使用相同的会话。即使:计时器有什么帮助?
  • 因为浏览器(即加载页面的用户)对于服务器来说是不同的“客户端”,而不是发送请求的脚本。
  • 他在哪里提到,他从另一个脚本发送请求?当我读到它时,请求是从浏览器中的一些 javascript 发起的。所以我假设它是同一个会话 cookie。
  • 他不用说,服务器就是这样工作的。您的浏览器和实际页面(位于另一台服务器上)是两个不同的客户端,每个客户端都有自己的会话。
  • 我的意思是“服务器的两个不同客户端”
【解决方案2】:

如果您想使用存储在$_SESSION 数组中的数据,您需要使用session_start() 启动或恢复现有会话。在你的 data.php 中,试试这个:

if($_GET['data'] == 'active') {
  session_start();
  session_destroy();
}

请注意session_start() 应该在您向客户端发送任何输出之前使用。

希望对你有帮助!

【讨论】:

    【解决方案3】:

    修改:

    $.post("data.php", {data: active}, function(whatever){} 
    

    并在您的 php 文件中使用:

    $_POST['data'];
    

    【讨论】:

    • 这不是真的。即使是POST请求,也可以从$_GET读取URL参数。
    • 在php文件中,通过ajax/jquery发送后需要获取$_POST
    • 他使用查询字符串 ?data=active 作为数据,所以 $_GET 工作得很好
    • 我想是的,除了我喜欢在发送(通过邮寄)和抓取(通过邮寄)中配对我的 ajax 请求,以免混淆
    • 好先生,您确实意识到您的答案是错误的,对吧?为什么你坚持无用的编辑和额外的细节,这也是错误的?
    猜你喜欢
    • 2023-03-24
    • 2016-10-20
    • 2011-02-22
    • 1970-01-01
    • 2014-08-04
    • 2013-09-04
    • 2017-07-21
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多