我有一项服务,在会话“准备就绪”时显示特定按钮,即提前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。这意味着当它们不仅有一个会话时,它感觉数据库中的所有会话都满足此条件
这段代码有问题吗? time_from_t是UNIX格式。
答案 0 :(得分:0)
time()
与时区无关的事实可能会产生一个问题 - 它总是返回UTC时间(这个事实隐藏在the comments中)。使用DateTime
对象可以处理更加强大的时区处理:
$date = new DateTime('now', new DateTimeZone($_SESSION['timezone']));
$current_time = $date->format("U");
无论哪种方式,下一步都是验证您的$current_time
变量和time_from_t
以查看数学出错的位置。