【问题标题】:How to update the database automatically after session is expired without refreshing on my page会话过期后如何自动更新数据库而不在我的页面上刷新
【发布时间】:2015-07-11 07:46:05
【问题描述】:

此代码需要刷新或单击页面才能进入索引页面,并且在会话过期后更新数据库之前。

我怎样才能让它在会话过期后自动更新数据库,这样用户活动将是 0 而无需刷新或点击页面?

$idletime = 3600; //after 1hr the user gets logged out

if (time() - $_SESSION['timestamp'] >= $idletime){
    $online = "UPDATE users SET active = 0 WHERE username = '".$_SESSION['username']."'";
    mysqli_query($con, $online);
    session_destroy();
    header("Location:index.php");
} else {
    $_SESSION['timestamp'] = time();
}

【问题讨论】:

    标签: php mysql session


    【解决方案1】:

    最好的选择是不在数据库中使用活动/非活动标志,而是使用last_active 时间戳之类的东西。当用户访问页面时,将时间戳更新为CURRENT_TIMESTAMP()。并判断用户当前是否处于活动状态,查询WHERE active_timestamp < TIMESTAMPADD(MINUTE, -60, CURRENT_TIMESTAMP())

    确保在表结构中将active_timestamp 设置为DATETIME 类型。 (ALTER TABLE users ADD COLUMN active_timestamp datetime AFTER username')

    这里的问题是您的脚本看起来想在会话空闲时将用户踢出。为此,您应该查看 JavaScript,设置一个倒计时 1 小时的计时器,如果没有活动,则重定向页面。

    【讨论】:

      【解决方案2】:

      我建议在这里使用不同的方法。 您不应更新数据库中的“活动”字段。否则,您在数据库中创建“lastActivity”字段,并在每次用户在网站上执行某项操作时更新它。

      在这种情况下,您可以通过像这样查询数据库轻松检测哪些用户处于非活动状态:

      SELECT * FROM users WHERE lastActivity < TIMESTAMP(CURRENT_TIMESTAMP() - INTERVAL 1 HOUR);
      

      您的 PHP 代码将如下所示:

      $online = "UPDATE users SET lastActive = NOW() WHERE username = '".$_SESSION['username']."'";
      mysqli_query($con, $online);  
      

      【讨论】:

      • SNAP :-) 很高兴看到我的想法没有偏离标准。
      • Sir Step 和 Sir Kevin,我使用了 Active,因为我使用的是徽章,如果用户处于活动状态,则徽章颜色为绿色,如 facebook。所以在我的代码中,除非你刷新页面,否则更新查询不会生效。那么有没有什么办法即使不刷新也会更新数据库?谢谢
      • 在脚本中,您决定显示哪个徽章,而不是像“... WHERE active = 1 ...”那样执行 SQL,就像我在示例中显示的那样执行 SQL。
      • 另一个问题,因为我只是这个活动用户代码的新手。 lastActivity 会更新什么?是时候了吗?或者我将在 lastActivity 上插入什么?是会话 ['timestamp']; ?谢谢你
      • 你需要把最后一次用户活动时间放在那里。你是对的。 lastActivity 与代码中的session['timestamp'] 相同。 MySQL 的 NOW() 函数为您完成。因此,在每个给定时间,您都可以知道用户在网站上执行任何操作后经过了多长时间。根据它你可以确定他是否活跃
      猜你喜欢
      • 2013-03-14
      • 2020-02-29
      • 2018-02-04
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2021-07-24
      相关资源
      最近更新 更多