0

ユーザーがまだログインしているかどうかを確認する if/else ステートメントが好きです。それ以外の場合は、ログインする必要があることを示すメッセージが表示されます。今、私がelseステートメントに持っているのはmysqliコードで、クエリを実行して、ログインしたユーザーに属し、が であるテーブル内の行Session_Completeを削除します。現在、これは機能しません。これは明らかにセッションの有効期限が切れているため、教師がログインしていないことを意味するため、セッションの有効期限が切れたときに詳細が破棄され、どの教師がログに記録されているかを認識できないため、クエリ行を削除できません。SessionTeacherIdSession_Complete0

だから私の質問は、セッションの期限切れのためにユーザーがログアウトした場合にqwntクエリが実行されるという同じ問題に誰かが取り組もうとしている場合、セッションの直前にそれを行うにはどうすればよいでしょうかユーザーがTeacherId, $useridログインする必要があるというメッセージを表示しながら、それをクエリで使用できますか?

以下は、現在の if/else ステートメントです。

if ((isset($username)) && (isset($userid))){ //checks the logged in teacher's username and userid

//whole page code here

}else{ 

echo "Please Login to Access this Page | <a href='./teacherlogin.php'>Login</a>";

$incomplete = 0;            

    $deletesession = " DELETE session, session_complete FROM Session AS session 
    LEFT JOIN Session_Complete AS session_complete
    ON session_complete.SessionId = session.SessionId
    WHERE (session.TeacherId = ? AND Complete = ?) "; 

                if (!$delete = $mysqli->prepare($deletesession)) {
      // Handle errors with prepare operation here
    }

    //Dont pass data directly to bind_param store it in a variable
$delete->bind_param("ii",$userid, $incomplete);

 $delete->execute();

        if ($delete->errno) {
          // Handle query error here
        }

        $delete->close();


}

?>
4

1 に答える 1

0

あなたができる唯一のことは、セッション Cookie を持続するように設定した時間に基づいて、セッションの予想される有効期限、またはユーザーの最後のアクティビティ時間を追跡し、それをデータベース レコードに保存することです。

cron ジョブを設定して、セッション テーブルを頻繁にスイープし、有効期限を過ぎたセッションをチェックする必要があります。なんらかの理由で cron ジョブを使用できない場合は、(通常の訪問者数に応じて) 多くのビューごとにセッション ガベージ コレクターをランダムに呼び出すように通常のコードを設定できます。

また、IP アドレスや User-Agent ヘッダーをチェックして、それらをセッションと関連付けてみることもできますが、これはかなりエラーが発生しやすいため、お勧めしません。

于 2013-01-22T00:05:47.877 に答える