在 Javascript 函数中销毁 PHP SESSION

Posted

技术标签:

【中文标题】在 Javascript 函数中销毁 PHP SESSION【英文标题】:Destroy PHP SESSION in Javascript Function 【发布时间】:2014-06-01 08:06:16 【问题描述】:

我在我的 php 脚本中创建了一个 session。 我想在 javascript 中销毁我的 php session。 当我点击Destroy Session 然后javascript函数destroy()调用并销毁SESSION['user']

 <?php
    ob_start();
session_start();
    SESSION['user'] = "test 123";
    echo "<a onClick = 'destroy()'>Destroy Session</a>";
 ?>

  <script>
      Function destroy()
       session_destroy();  // Like `PHP` I want destroy Session in `javascript`
      
  </script>

【问题讨论】:

您不能直接使用 javascript 访问 SESSION。你必须要么 POST 要么使用 AJAX。 PHP 是服务器端 - 所以你的会话也是服务器端的。 Javascript是客户端。为什么您不会通过 javascript 将站点刷新为脚本,从而破坏您的会话? 我认为你不能在 javascript 中破坏 php 会话。因为 javascript 是客户端,而 php 是服务器端脚本。因此,如果您想实现这一点,您可以通过在某个时候进行 ajax 调用来实现,并且您的 ajax 指向的 php 文件将破坏您的会话。 【参考方案1】:

我认为你应该使用 AJAX 从 Javascript 中销毁函数。喜欢:

.js 代码:

function destroy_session()
    var xmlhttp = getXmlHttp();
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open('GET','./destroy_session.php', true);
    xmlhttp.onreadystatechange=function()
       if (xmlhttp.readyState == 4)
          if(xmlhttp.status == 200)
             alert(xmlhttp.responseText);
         
       
    ;
    xmlhttp.send(null);

destroy_session.php代码:

<?php
    session_start();
    $_SESSION = array();
    if (ini_get("session.use_cookies")) 
       $params = session_get_cookie_params();
       setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
       );
    
    session_destroy();
    echo 'Session was destroyed';
?>

【讨论】:

【参考方案2】:

你不能直接在javascript中销毁php的会话,因为javascript在客户端运行,而php在服务器上运行。

但是您可以在 php 中从 php 中删除会话 cookie - 当它使用时!

但这只会将客户端与会话分离,不会破坏会话。

【讨论】:

【参考方案3】:

您可以做的是使用 AJAX 加载执行 session_destroy() 的 PHP 页面。 jQuery 有非常简单的 ajax 函数,记录在 here。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review ... 某处或某处是否存在类似 3 年历史的“需要审查的答案”队列?除此之外,我不同意这“本质上是一个仅链接的答案”的说法。我不明白审查(1)不是最佳答案和(2)不是公认答案的 3 岁答案的目的。这听起来就像是声誉养殖。 是的 - 有一个队列。然而,没有代表农业 - 这只是为了帮助保持网站清洁。如果您想了解有关此过程的更多信息,this post is helpful. 并非所有人都同意我的评估 - 您提供的链接很有帮助。如果接受的答案也包含 jQuery 链接,我认为您的答案将被删除。 不试图分裂 - 如果您在接受的答案被接受后添加了一个代码示例,我认为您的帖子不会被标记(因为该链接很有帮助。) ...好吧。这实际上解释了这一点。非常感谢!我很感激你向我解释。我一定会记住这一点,以便将来得到答案!

以上是关于在 Javascript 函数中销毁 PHP SESSION的主要内容,如果未能解决你的问题,请参考以下文章

javascript高级程序设计摘要

JavaScript基础知识六(内存释放作用域销毁)

javascript 闭包

PHP学习笔记:删除与销毁session

JavaScript 练习题

PHP常用原生函数总结(不定期更新)