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

时间:2009-08-23 16:37:15

标签: php jquery function

我正在做一个简单的聊天脚本,我有killSession函数,它杀死当前会话并从数据库中删除用户。问题是,在设置并验证名称后,聊天表单不会加载,它只会终止会话并返回到loginForm()。这是脚本:

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

    $(window).unload(function () {
        <?php  killSession(); ?>
    });

有没有办法在刷新或关闭页面后触发killSession()?

更新

仍然无法弄明白。也许我需要休息一下。

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

这是killSession.php页面:

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 个答案:

答案 0 :(得分:5)

调用PHP函数killSession时会立即终止会话。所以你的代码会在执行时终止会话。

您需要做的是仅在killSession事件被触发时才调用PHP函数onunload。只有向服务器发送新请求才能通过JavaScript调用PHP函数。

因此,您需要向脚本发送请求,然后调用killSession函数,可能是这样的:

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

然后在 killSession.php 中,然后调用PHP函数killSession

答案 1 :(得分:1)

请求无效,因为它是异步的,这意味着您的javascript不必等待服务器。使请求同步将使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:

我假设您认为无论何时调用位置:在php中的index.php(每个ajax)。浏览器将重定向到那里。事实上,Ajax不会以这种方式工作,相反,它会完全绕过浏览器。这就是使ajax如此有用的原因。您在index.php中回显的所有内容都是jQuery从请求中收到的内容。你需要用它做点什么。我只是在我的片段中提醒它作为一个例子。我也使用错误来查看请求是否失败。您可能还想查看firebug。您可以使用控制台选项卡查看所有ajax请求。

PS:您可能还想在第一个PHP脚本中启动会话。

答案 2 :(得分:0)

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