【问题标题】:How to clear a PHP session using Jquery/Javascript?如何使用 Jquery/Javascript 清除 PHP 会话?
【发布时间】:2014-09-15 09:36:54
【问题描述】:

只想问是否可以使用 jquery 或 javascript 进程清除 PHP 会话?因为我想做的是使用对话框清除 PHP 会话。如果用户单击“确定”按钮,它将处理未设置的功能。在我的页面中有一个结帐过程,在用户单击“确定”按钮后,它将提示一个对话框,如果用户单击“确定”按钮,它将取消设置 PHP 会话,并将被重定向到另一个页面。

这是我的简单代码:

<i class="fa fa-check"></i> <span id="save_registry" class="cursor: pointer">OK</span>

<div id="save_alert" style="display: none">
    <?php unset($this->session->data['cart']);
</div>


....

$('#save_registry').click(function(){

        $('#save_alert').dialog({
            modal: true,
            buttons: {
                Ok: function() {
                    $( this ).dialog( "close" );
                    location = 'index.php?route=common/home'; 
                }
            }
        });

});

【问题讨论】:

  • 您可以删除会话 cookie。但是,要正确注销,您需要进行 ajax 调用,以便您的 PHP 脚本可以清除 $_SESSION 变量并正确过期 cookie 以防止会话劫持。

标签: php jquery session


【解决方案1】:

简单地说:你不能,直接

PHP 是一种服务器端语言,而 javascript 是一种客户端语言,这意味着它们之间除了您接收和交互的文档之外没有其他联系与你。会话由服务器存储和管理。

但是,正如 War10ck 建议的那样,您可以调用清除会话的服务器端脚本。像这样的:

PHP:

<?php
    /* 
     * session_start();
     * Starting a new session before clearing it
     * assures you all $_SESSION vars are cleared 
     * correctly, but it's not strictly necessary.
     */
    session_destroy();
    session_unset();
    header('Location: continue.php'); 
    /* Or whatever document you want to show afterwards */
?>

HTML/javascript:

<script type="text/javascript">
    function logout() {
        document.location = 'logout.php';
    }
    LogoutButton.addEventListener('click', logout, false);
</script>

<button id="LogoutButton">Log out</button>

甚至执行异步调用:

function logout() {
    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
        document.location = 'continue.php';
    }
    xhr.open('GET', 'logout.php', true);
    xhr.send();
}

【讨论】:

  • 感谢您的解释。它真的有助于我理解会话。 :) 我会尝试你的建议。非常感谢! :)
  • 为我工作!谢谢
【解决方案2】:

有一种方法可以直接从 javascript 中完成...首先你必须声明一个通过键清除 cookie 的函数

function removeCookie(cookieName)
{
    cookieValue = "";
    cookieLifetime = -1;
    var date = new Date();
    date.setTime(date.getTime()+(cookieLifetime*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = cookieName+"="+JSON.stringify(cookieValue)+expires+"; path=/";
}

现在您所要做的就是像这样删除带有“PHPSESSID”键的 cookie

removeCookie("PHPSESSID");

现在当你var_dump($_SESSION) 你发现它是空数组

【讨论】:

  • 请注意,javascript 不是直接删除会话:客户端读取 cookie,使其无效并将适当的信息发送到服务器,然后相应地使会话过期。 +1 替代解决方案。
【解决方案3】:

您不能直接使用 Javascript 清除 php 会话。

PHP 是服务器端语言,而 Javascript 是客户端语言。

但是,您可以向处理销毁的指定页面抛出 ajax 请求。

像这样:

// Client-side
$.post("logout.php", {"can_logout" : true}, function(data){

   if(data.can_logout)
      // redirect the user somewhere
}, "json");


<?php
   // Server-side
   $can_logout = $_POST["can_logout"];

   if($can_logout)
     session_destroy();

   echo json_encode(array("can_logout" => true));
?>

或者只是将用户指向某个处理会话破坏的页面;即logout.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2016-10-29
    相关资源
    最近更新 更多