-1

以下にスクリプトがあります。ウィンドウを閉じると、ユーザーのログアウトは機能していますが、データベースではステータスは変化しませんでした。ステータス 1 はユーザーがオンラインであることを示し、ステータス 0 はオフラインであることを示しますが、ユーザーがウィンドウを閉じてログアウトしてもステータスは変わりませんでした。

「ログアウト」ボタンをクリックすると、ステータスが変わるだけです。

if($_SESSION['username'] != "admin")
{
    $timeout = 1; 
    $logout_redirect_url = "logout.php"; 
    $timeout = $timeout * 60; 

    if(isset($_SESSION['start_time']))
    {
        $elapsed_time = time() - $_SESSION['start_time'];
        if ($elapsed_time >= $timeout)
        {
            $db->query($strQuery1);
            header("Location: $logout_redirect_url");
        }
    }

    $_SESSION['start_time'] = time();
}
4

2 に答える 2

0

それがより良い方法かどうかわかりませんユーザーが現在Webサイトにアクセスしているかどうかを動的に知りたい場合は、データベースで最後に接続する値を設定できます(これにより日時の値が保存されます)。この値「最後の接続」は、ユーザーが新しいページをリロードしたときにリセットされます。これは、テストを適用して、ユーザーが現在ログに記録されているかどうかを確認するときにリセットされる場合があります。

その後、「last connect」という値を読み取るcronを作成すると、ユーザーがタイムアウトしているかどうかを知ることができます。

于 2012-10-23T10:21:35.010 に答える
0

できることは、javascriptwindow.onBeforeUnloadイベントを追加することです。これは、ajax呼び出しをトリガーし、クエリを更新します。

しかし、それは唯一のクライアント側であるため安全ではありませんが、一見の価値があります。

もう1つの方法は、セッション時間を確認し、セッションが目的のタイムアウトで更新されていない場合は、ユーザーを手動でログアウトすることです。

PS:このマニュアルもご覧ください。参考になります。

于 2012-10-23T10:23:41.737 に答える