2013-05-29 2 views
0

Я пытаюсь выяснить способ отображения, если пользователь (а не сам) в настоящее время зарегистрирован. В настоящее время это для страницы edit_user и предназначено только для использования как администратор, но это, скорее всего, будет расширяться по мере развития. Я что-то думал по линиямCI Ion Auth, смотрите, зарегистрирован ли другой пользователь

if($user->ion_auth->logged_in()) { 
    echo "<span class='active'>$user->username</span>"; 
} 

Но это не работает. Есть идеи?

Я нашел свой ответ и предоставил его ниже, спасибо за другие ответы и заработал некоторые идеи.

+0

Обновлен мой ответ еще немного, чтобы дать вам еще несколько вариантов для рассмотрения. – prograhammer

ответ

0

I понравился вход, и это заставило меня задуматься. Итак, вот решение, с которым я решил пойти. Вместо добавления операторов вставки или обновления я решил использовать сериализованные данные сеанса уже в базе данных. Это также использует существующие функции 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 
} 
2

Поле "active" используется, чтобы вы могли включить/отключить возможность входа в систему. Если вы посмотрите в базе данных, вы увидите, что все ваши пользователи, которых вы создали, имеют «active = 1" . В этом поле не указывается, вошел ли пользователь в систему или нет. Единственное поле, которое может дать вам некоторые указания, - это поле «last_login», которое сообщает вам, когда они в последний раз вошли в систему. Однако это не означает, что они в настоящее время вошли в систему (в основном вы хотите знать, если они все еще есть активная сессия, и нет никакого способа узнать это, так как вы не на ПК этого пользователя).

Единственный способ, которым я знаю, чтобы более точно отслеживать, если пользователь в настоящее время вошел в систему, заключается в том, чтобы иметь базу данных отслеживать, когда последний раз, когда пользователь обращался к любой странице. Если в последний раз, когда пользователь обратился к странице слишком давно, вы знаете, что пользователь больше не вошел в систему. Я бы не рекомендовал этот подход, так как по существу есть запись базы данных для каждого запроса/обновления на вашем сайте этим пользователь. Это может быть проблематично для загрузки базы данных/сервера, особенно если вы заняты пользователями.

Итак, какие у вас более разумные варианты выбора?

  1. Просто зайдите на последнего входа в систему, чтобы получить некоторое представление о том, кто вошел в систему в.
  2. Побегайте pre-system or pre-controller hook обновить таблицу пользователя, если пользователь все еще вошли в систему, но писать об этом в базе данных реже, возможно, в час (+ несколько случайных минут, чтобы разойтись, пишет немного больше). Вам нужно будет добавить новое поле в таблицу пользователя для отслеживания этого.
  3. Google Analytics приблизительно соответствует числу активных пользователей на вашем сайте. Однако это дает вам общее представление о том, кто эти пользователи на самом деле.
0

Ion Auth уже имеет столбец last_login .Add другой столбец last_logout в таблице пользователей. (Юниксовое время)

Теперь используйте запрос, чтобы получить зарегистрированных пользователей

SELECT `user_name` From `users` WHERE `login_time` > `logout_time`