我的自动重定向登录页面方法在PHP中是否正确?

2 php session logout

我有一个社区网站,用户可以有很多朋友.在展示他的所有朋友时,我想包括他的朋友是在线还是离线.

我的方法是,当用户登录时,在状态列"在线"上创建会话并更新用户表.如果他点击退出按钮,那么我将状态设置为"离线".如果他在没有点击退出按钮的情况下关闭浏览器怎么办?这是我想要做的:

session_start();
if (!isset($_SESSION['LAST_ACTIVITY'])) {
    // initiate value
    $_SESSION['LAST_ACTIVITY'] = time();
}
if (time() - $_SESSION['LAST_ACTIVITY'] > 3600) {
    // last activity is more than 10 minutes ago
    session_destroy();
    //direct to a php, say this user is idle and thus status = offline
    header("location: update_status.php?user=".$_SESSION['username']."&status=offline");
    // den redirect them to login page
} else {
    // update last activity timestamp
    $_SESSION['LAST_ACTIVITY'] = time();
}
Run Code Online (Sandbox Code Playgroud)

这是一种合适的方式吗?


编辑:

看一些简单的示例代码有助于如何检查用户何时在线并在用户访问页面时进行更新?

我是否需要包含php?user=$_SESSION['userid']在每个链接中?

kas*_*ter 5

好吧,如果您确定用户是否已注销,只需通过您的在线/离线列 - 然后用户关闭其浏览器窗口(无需点击您的注销链接/按钮)仍将登录.

这里的常规方法是跟踪用户何时在您的网站上移动,存储导航到页面的最后时间.然后设置一个预定义的常量,使用户处于活动状态(比如在最近15分钟内浏览你的页面) - 然后在SQL查询中使用它来抓取每个访问者的朋友并且一直在最近15分钟内的网站.

在SQL查询中,您将时间存储为日期时间(这是MySQL的查询),这可能类似于:

SELECT col1, col2, col3 FROM Users WHERE DATE_ADD(LastActive, INTERVAL 15 MINUTE) > NOW() AND UserIsFriendOfCurrentUser
Run Code Online (Sandbox Code Playgroud)

当然,您的查询需要进行调整以更好地适应您的设置,但希望您能得到这个想法.