【问题标题】:Destroy PHP SESSION in Javascript Function在 Javascript 函数中销毁 PHP SESSION
【发布时间】: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 文件将破坏您的会话。

标签: javascript php ajax session destroy


【解决方案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 链接,我认为您的答案将被删除。
      • 不试图分裂 - 如果您在接受的答案被接受后添加了一个代码示例,我认为您的帖子不会被标记(因为该链接很有帮助。)
      • ...好吧。这实际上解释了这一点。非常感谢!我很感激你向我解释。我一定会记住这一点,以便将来得到答案!
      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      相关资源
      最近更新 更多