ネットワーク上でCronジョブを実行して、ログアウトボタンを使用していないユーザーに「粗い」ログアウト時刻を自動的に追加します。私は最終的なコーディングで少し助けが必要です。私データベーステーブルにアクティブになっていないすべてのユーザーのログアウト時間を追加します(ブラウザまたはタブを閉じます)
、アクティブまたはアクティブため1
ないため0
ことができるcurrent_status
呼ばれる各ユーザーの行が存在します。このステータスは、自分のネットワークの各ページで更新されます。
また、ユーザがログインすると行が追加されるap_login_history
というデータベーステーブルがあり、の行は、ユーザがログアウトボタンを押すまで0000-00-00 00:00:00
と表示されます。
ユーザがログアウトボタンをクリックしなかった場合に空の時間を修正するには、数時間ごとにCronジョブを実行してを0
に更新し、300秒待ってユーザーがまだアクティブであるかどうかを確認します0
に変更されたメールアドレスが1
に更新されていないかどうか再度確認してください。
ユーザーがアクティブでない場合(更新はcurrent_status
はまだそれはcronジョブによって更新された0
であることを返しますすなわち)ap_login_history
表にlogout_time
にタイムスタンプを追加します。それはsleep()
設定と気質だが
//// RESET ANY ACTIVE USERS TO NON ACTIVE
$sql = "SELECT * FROM `ap_users` WHERE `current_status` = '1'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$user_id = $row['user_id'];
$email_address[] = $row['email_address'];
mysqli_query($conn, "UPDATE `ap_users` SET `current_status` = '0' WHERE `current_status` = '1' AND `user_id` = '$user_id'");
}
}
//// GIVE USERS A CHANCE TO SHOW AS ACTIVE IF STILL LOGGED IN
sleep(300);
$timestamp = date("Y-m-d H:i:s");
//// UPDATE LOGOUT TIME FOR USERS WHO ARE NO LONGER ACTIVE
foreach ($email_address as $value) {
$sql = "SELECT * FROM `ap_users` WHERE `current_status` = '0' AND email_address = '$value'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$email_address = $row['email_address'];
mysqli_query($conn, "UPDATE `ap_login_history` SET `logout_date` = '$timestamp' WHERE `email_address` = '$email_address' AND `logout_date` = '0000-00-00 00:00:00'");
}
}
}
このスクリプトは、作業を行います。
は、ここに私のcronジョブスクリプトです。おおよそ130
の下にあるものはすべて成功しますが、これ以上長くなると内部サーバーエラーが発生します。ここではsleep()
関数を使うのは良い考えではありません。
ここで待機時間を制御する方法や、100%成功する場合にこの機能を実行する方法はありますか?たぶんそれを少しきれいにすることさえできますか?私の以前のプロジェクトのために、事前
これはユーザーがページを閉じても機能しますか? – Snappysites
noScriptを使用している人やjavascriptを無効にしている人ではうまくいかないことを除いて、私はこれを2番目とします。 – VikingBlooded
ページが閉じていると動作しません。 –