代码之家  ›  专栏  ›  技术社区  ›  Norbert Pushparaj Yuvaraj

$(window.unload)中的killSession()PHP函数

  •  2
  • Norbert Pushparaj Yuvaraj  · 技术社区  · 15 年前

    <?php
    if (!isset($_SESSION['name'])) {
        loginForm(); // set a name for chat
    } else {
    ?>
        // chat form
    
        $(window).unload(function () {
            <?php  killSession(); ?>
        });
    

    更新:

    $(window).unload(function () {
        $.get("killSession.php", { name:"test" }); // i set the name to test for testing
    });
    

    session_start();
    function killSession($name) {
        include("config.php");
        mysql_query("DELETE FROM sessions WHERE name='$name'");
        session_destroy();
        header("Location: index.php");
    }
    
    killSession($_GET['name']);
    

    $.get仍然不起作用,所以我分别通过浏览器进行了尝试。killSession.php?name=test将从数据库中删除,但不会终止会话。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Gumbo    15 年前

    当PHP函数启动时,会话立即终止 killSession

    基尔塞西 只有当 onunload

    基尔塞西 函数,可能是这样的:

    $(window).unload(function () {
        $.get("killSession.php");
    });
    

    而在 killSession.php 基尔塞西

        2
  •  1
  •   MrHus    15 年前

    请求无法工作,因为它是异步的,这意味着您不必等待服务器。使请求同步将使javascript等待响应:

    $(document).ready(function()
    {
        $(window).unload(function() 
        { 
            $.ajax
            ({
                type: "GET",
                url: "killSession.php",
                async: false,
                data: "name=test",
                success: function(msg)
                {
                    alert(msg);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown)
                {
                    alert("I failed");
                }
            });
        });
    });
    

    关于ajax:

    firebug . 您可以使用console选项卡查看所有ajax请求。

    PS:您可能还希望在第一个php脚本中启动会话。

        3
  •  0
  •   dusoft    15 年前

    我建议使用隐藏的iframe调用PHP kill会话脚本或AJAX HTTPrequest GET方法