0

セッションが「準備完了」のとき、つまり15分前とセッション中に特定のボタンを表示するサービスがあります。

これを行うには、最近要求されたすべてのセッションをプルアップし、それらのタイムスタンプを分析してから、そのセッションが予定されている場合は特定のIDをプルします。コードは次のとおりです。

$session_check_query = "SELECT * FROM requested_sessions WHERE username_t = '{$_SESSION['username']}'";
$session_check_process = mysql_query($session_check_query);

date_default_timezone_set($_SESSION['timezone']);
$current_time = time();

while ($sessions = mysql_fetch_array($session_check_process)) {
    if ($sessions['time_from_t'] - $current_time <= 900 && $current_time - $sessions['time_from_t'] > 0 && $sessions['accepted'] == 1) {
        $session_id = $sessions['id'];
    }
}

問題は、ループで$ session_idをエコーすると、1、2、3、4が出力されることです。これは、データベース内のすべてのセッションが、1つだけではなく、この基準を満たしていると感じることを意味します。

このコードに問題はありますか?time_from_tはUNIX形式です。

4

1 に答える 1

0

1 つの考えられる問題は、time()がタイムゾーンに依存しないという事実から発生する可能性があります。常に UTC 時間を返します (この事実はコメントに埋もれています)。タイムゾーンのより堅牢な処理は、DateTimeオブジェクトで処理できます。

$date = new DateTime('now', new DateTimeZone($_SESSION['timezone']));
$current_time = $date->format("U");

いずれにせよ、次のステップは、$current_time変数を検証time_from_tし、数学がどこで間違っているかを確認することです。

于 2013-02-01T03:17:06.753 に答える