killSession () PHP-функция внутри $ (окна) .unload - PullRequest
2 голосов
/ 23 августа 2009

Я делаю простой скрипт чата, и у меня есть функция killSession, которая убивает текущий сеанс и удаляет пользователя из БД. Проблема в том, что после того, как имя установлено и проверено, форма чата не загружается, она просто убивает сеанс и возвращается к loginForm (). Вот сценарий:

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

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

Есть ли способ вызвать killSession () только после того, как я обновлю или закрою страницу?

UPDATE:

Все еще не могу понять это. Может быть, мне нужен перерыв.

$(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 ]

5 голосов
/ 23 августа 2009

Сеанс прерывается сразу же при вызове функции PHP killSession. Таким образом, ваш код будет убивать сеанс всякий раз, когда он выполняется.

Вам нужно вызывать функцию PHP killSession только тогда, когда происходит событие onunload. А вызов функции PHP из JavaScript возможен только при отправке нового запроса на сервер.

Итак, вам нужно отправить запрос в скрипт, который затем вызывает функцию killSession, возможно, что-то вроде этого:

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

А внутри killSession.php вы затем вызываете функцию PHP killSession.

1 голос
/ 23 августа 2009

Запрос не работает, потому что он асинхронный, это означает, что ваш 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:

Я предполагаю, что вы думаете, что всякий раз, когда вы вызываете Location: index.php в php (per ajax). Это браузер будет перенаправлять туда. Ajax не работает таким образом, на самом деле он работает наоборот, он полностью обходит браузер. Это то, что делает AJAX таким полезным. Все, что вы видите в index.php, - это то, что jQuery получает от запроса. Вы должны сделать что-то с этим. Я просто предупреждаю об этом в своем фрагменте в качестве примера. Я также использую ошибку, чтобы увидеть, если запрос не удается. Вы также можете посмотреть на firebug . Вы можете использовать вкладку консоли для просмотра всех ваших запросов AJAX.

PS: Вы также можете начать сеанс в первом скрипте php.

0 голосов
/ 23 августа 2009

Я бы порекомендовал скрытый iframe, вызывающий сценарий сеанса PHP kill или метод GET AJAX HTTPrequest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...