2009-08-23 8 views
2

私は単純なチャットスクリプトを実行しています。私は現在のセッションを終了し、ユーザーをDBから削除するkillSession関数を持っています。問題は、名前が設定され、チャットフォームがロードされていないことを確認した後、セッションを終了してloginForm()に戻ります。スクリプトは次のとおりです:

私は、ページを更新したり閉じたりした後で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はまだ動作しませんので、私はブラウザを介しseparatlyそれを試してみました。 killSession.php?name = testはDBから削除しますが、セッションを強制終了しません。

+0

あなたは 'killSession'関数を呼び出すことを忘れてしまいます。関数を宣言しても関数は呼び出されません。 SQLインジェクションについても自分自身に知らせるべきです。 – Gumbo

+0

ああ、申し訳ありません、私はここにそれを追加するのを忘れました。 killSession($ _ GET ['name']); – Norbert

+0

セッションの問題を修正しましたので、killSession.php?name = testは正しく動作します。唯一の問題は今PHPコードを実行していない$ .getです。 – Norbert

答えて

5

PHP関数killSessionが呼び出されると、直ちにセッションが終了します。したがって、コードは実行されるたびにセッションを終了させます。

あなたがする必要があるのは、イベントが発生したときにのみ、PHP関数killSessionを呼び出すことです。 JavaScriptからPHP関数を呼び出すことは、新しいリクエストをサーバーに送信することによってのみ可能になります。

だから、このような何か多分、killSession関数を呼び出すスクリプトにリクエストを送信する必要があります。

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

そしてkillSession.php内部あなたがPHP関数killSessionを呼び出します。

+0

+1 - 単純な考えですが、私はおそらくそれを考えなかったでしょう。 – karim79

+0

それは動作していないようです。アンロードの中にアラートを入れて問題がないかどうかを確認しますが、ページからの呼び出しに問題があると思います。 – Norbert

+0

どのようにセッションIDを渡しますか? URL単位であれば、そのJavaScriptコードのURLにセッションIDを追加する必要があります。 – Gumbo

0

私はPHPキルセッションスクリプトを呼び出す非表示のiframeをお勧めしますか、AJAXのHttpRequest GETメソッド

1

それは、これはあなたがjavascriptのは、サーバーを待つ必要はありませんよということを意味非同期(async)であるため、要求が機能していません。私はあなたが場所を呼び出すたびだと思うことを仮定してい

:(アヤックスあたり)PHPでindex.phpをAJAXで

$(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"); 
      } 
     }); 
    }); 
}); 

:要求の同期を作ることは、応答のためのjavascriptの待機を行います。ブラウザがそこにリダイレクトすることを示します。実際にはAjaxはこのように動作しません。反対に、ブラウザを完全にバイパスします。これがAjaxをとても有用にするものです。 index.phpにエコーするものはすべて、jQueryがリクエストから返すものです。あなたはそれで何かをする必要があります。私は一例としてスニペットで警告しています。また、エラーが発生してリクエストが失敗したかどうかを確認します。 firebugを調べることもできます。コンソール・タブを使用して、すべてのajaxリクエストを表示できます。

PS:最初のPHPスクリプトでセッションを開始することもできます。

+0

$(ウィンドウ)の.unload(function(){}を削除して$ .getだけ残しておけば解決しました このスクリプトを実行するには、リロード/クローズされていますか? – Norbert