我正在尝试找出一种方法来显示用户(不是自己)当前是否已登录。目前这是用于 edit_user 页面,暂时仅用于作为管理员,但这可能会扩展为我开发。我在想一些事情
if( $user->ion_auth->logged_in() ) {
echo "<span class='active'>$user->username</span>";
}
但这不起作用。有任何想法吗?
我找到了我的答案并在下面提供了它,感谢您的其他答案并激发了一些想法。
我正在尝试找出一种方法来显示用户(不是自己)当前是否已登录。目前这是用于 edit_user 页面,暂时仅用于作为管理员,但这可能会扩展为我开发。我在想一些事情
if( $user->ion_auth->logged_in() ) {
echo "<span class='active'>$user->username</span>";
}
但这不起作用。有任何想法吗?
我找到了我的答案并在下面提供了它,感谢您的其他答案并激发了一些想法。
使用“活动”字段,因此您可以打开/关闭用户登录的能力。如果您查看数据库,您会看到您创建的所有用户都有“活动=1”。此字段不会告诉您用户是否已登录。唯一可以给您一些指示的字段是“last_login”字段,它会告诉您他们上次登录的时间。但是,这不会告诉您他们当前是否登录(基本上您想知道他们是否仍然有一个活动会话,并且由于您不在该用户的电脑上,因此无法知道这一点)。
我知道更准确地跟踪用户当前是否登录的唯一方法是让数据库跟踪用户上次访问任何页面的时间。如果用户上次访问页面的时间太久了,那么您就知道该用户不再登录。我不推荐这种方法,因为本质上,您网站上的每个请求/刷新都有一个数据库写入用户。这可能会给您的数据库/服务器负载带来问题,尤其是当您忙于处理用户时。
那么你有哪些更合理的选择呢?
我喜欢这个输入,它让我思考。所以这是我决定采用的解决方案。我决定使用数据库中已有的序列化会话数据,而不是添加插入或更新语句。这也利用了 ci 和 ion-auth 的现有功能,而无需修改它们。因此,如果其他人想使用它,这里是代码:
// character length of the userid
$userID_Length = strlen( $user->id );
// set a time to look at for validity
$now = time() - ( 10 * 60 ); // (minutes x seconds)
// query statement
$statement = "SELECT session_id FROM ci_sessions WHERE last_activity >= $now AND user_data LIKE '%s:7:\"user_id\";s:$userID_Length:\"$user->id\";%'";
// run query
$query = $this->db->query( $statement );
// check results of query
if( $query->num_rows() > 0 )
{
// positive result
}
else
{
// negative result
}
Ion auth 已经有一列last_login 。将另一列last_logout 添加到 users 表中。(unix 时间)
现在使用查询来获取登录用户
SELECT `user_name` From `users` WHERE `login_time` > `logout_time`