0

私はCodeIgniterを使用してPHPでTickerサポートクライアントを開発しています。ユーザーがすでにチケットを開いてこのチケットをリストから非表示にしているかどうかを知りたいです。

チケットが開かれたときにデータベースのフラグを変更する解決策があることを知っています。次に、次を使用します。

 $(window).unload(function() {
    $.ajax({async:false ..... 
    /* change flag in database */
 });

しかし、ユーザーのナビゲーターが強制的に閉じている場合はどうなりますか?これらのフラグをリセットするには、CRONタスクを実行する必要がありますか?完全なソリューションについてのフィードバックはありますか?ありがとう。

4

2 に答える 2

2

PHP はページの読み込みごとに 1 回しか実行されないため、ユーザーがまだ目的のページにいるかどうかを継続的に確認するには、Javascript + AJAX が必要です。どのように?

1〜5分ごとに、最後の更新のタイムスタンプを使用してデータベースの特定のフィールドを更新し(あなたが言ったように)、PHPスクリプトでそのフィールドをチェックして、そのチケットを閉じるか開いたままにします。

ちなみに、このソリューションではJavascript を有効にする必要があるため、ユーザーに有効にするよう強制するか (そうでなければブロックして)、数分 (15 ~ 1 時間) ページが読み込まれないとチケットを閉じるように定義します。

于 2012-12-19T09:31:54.317 に答える
0

いくつかのオプションを提案できます。

  • Jeffreyが提案するajaxソリューションを使用します。

    利点:実装が簡単で、すべてのブラウザでサポートされています

    短所:実際にはライブではない

  • サーバー送信イベントの使用(ajax ポーリング ソリューションと同様)

    利点:オーバーヘッドが少ない

    不利な点: IE と Android ではサポートされておらず、実際にはライブではありません

  • 完全にライブ ソリューションのwebsocket 。接続が失われたか閉じられたときに、接続を確立します => チケットを解放します。

    利点:ライブ、オーバーヘッドが最小

    欠点: IE10 と Android ではサポートされておらず<、サーバー側での実装が困難です。

ただし、「サポートされていない」問題については、フォールバック手法があります ( modernizr )

于 2012-12-19T09:45:15.030 に答える