2012-01-05 15 views
0

セッションを使用してブラウザを再起動した後に終了するスクリプト(php)を作成しました。また、セッションを破棄してクッキーを削除して "ログアウト"ブラウザから)。ユーザーが喜んでログアウトすると、時間が私のスクリプトでPHPセッションが終了してからの保存時間

が保存されます。

そして、ここでは私の問題です。しかし、ブラウザを再起動したり閉じたりした場合は制御できません。

これらのケースを処理するために使用できる方法はありますか?ありがとう...

+0

ユーザーがブラウザを終了したときを知りたいですか?多分アヤックスコールをすることができますか? – thatwasbrilliant

+0

私が覚えている限り、文書のクローズイベント(名前を覚えていない)を検出し、AJAXリクエストを送信してデータを保存する必要があります。 – therealszaka

+0

なぜ最初に必要なのですか? – zerkms

答えて

1

アンロードJavascriptイベントにAJAXイベントをバインドします。

$(window).unload(function() { 
    $.ajax({ 
     url: 'someLogoutRequest.php' 
    }); 
}); 
+1

同じサイトの複数のタブが開いています - – hakre

+0

...そして私がコメントで言及したように - もしクライアントが接続を失ったら? – zerkms

+0

アンロードイベントはタブ固有のものですが、私はかなり確信しています。 – jjs9534

4

ブラウザからのリクエストがない場合、サーバー側(PHP)は通知しません。

ただし、データベース内の最後のアクティビティタイムスタンプを更新すると、最後のアクティビティがいつ行われたかがわかります。しばらくしてセッションが破棄されると、そのユーザーの最後のアクティビティは次のログインまでデータベースに残ります。

+0

私はこれが解決策だと思います。さらに、ユーザーの最後の訪問が心配な場合は、ログインしたユーザーのタイムスタンプを更新するか、最後のセッションアクセス時刻を追跡する独自のセッションハンドラを作成するだけです。もちろん、セッションデータは随時パージされます(ガベージコレクションを参照)。タイムスタンプに興味がある場合は、最初の選択肢があります。そうすれば、ユーザーはいつも最後に訪問することになります。 – ashein

2

ajaxを使用してサーバーに適度な間隔でチェックインするユーザーページを取得できます。 (5分?)そして、5分ごとにサーバー上でジョブを実行し、その時間内にチェックインしなかったユーザーを確認します。ウィンドウを閉じたり、接続を失う時間は、最後のチェックインと現在の時間の間にあって、セッションを破棄することができます。

0

PHPセッションは通常、ブラウザを閉じたときに終了します(混乱しないクッキーとセッションであることを前提とします)。しかし、タイムスタンプをタイムスタンプとして保存する余分なセッションを追加することができます。 voidでセッションをクリアします。ユーザーがナビゲートすると、このタイムスタンプが更新されるため、ナビゲーションのタイムアウトに時間がかかりません。 Imはまだあなたのやろうとする理由と理由を100パーセントも明らかにしていません。だから、私の答えは、必要性のミュートのコンセプトになる可能性があります。 jjs9543はあまりにも悪い提案ではありませんが、ユーザーのブラウザでJavascriptが無効になっていると、その提案は失敗します(私は数年前と同じくらい一般的ではありません。

関連する問題