Как обнаружить, если пользователь вышел из системы в php?

Я использую хитрый способ через PHP Dom Parser

include('simple_html_dom.php');
$html = file_get_html('http://twitter.com/mnckry');
$img = array();

foreach($html->find('img.size73') as $e)
    $img[] = $e->src;

foreach($html->find('.profile-header-inner') as $e)
    $img[] = str_replace("')", "", str_replace("url('", "", $e->{'data-background-image'}));



echo $img[0];//Avatar
echo "
"; echo end($img);//ProfileBG

. Это даст вам что-то вроде этого; https://pbs.twimg.com/profile_images/378800000487958092/e04a191de329fcf8d000ca03073ad594_bigger.png

, чтобы получить 2 других размера; для большой версии удалите «_bigger», для уменьшенной версии замените «_bigger» на «_normal»

9
задан neophyte 24 January 2017 в 16:16
поделиться

11 ответов

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

тогда вы можете рассмотреть возможность использования сеанса для отдельного пользователя и вместо сохранения login = true в базе данных для отображения их статуса вам или другим пользователям сохранить время последней активности для пользователя. Когда вы открываете свой список онлайн-пользователей, создайте запрос sql, чтобы возвращать только пользователей с last_activity в течение последних 10 минут.

1
ответ дан 4 December 2019 в 08:52
поделиться

ИМХО, лучший способ - сохранять метку времени последней активности в БД при каждом обновлении пользовательской записи. После выхода из системы или тайм-аута (поддерживать тайм-ауты с помощью cronjob) просто установите для него нулевое значение и используйте как флаг.

$user = new User($user_id);
$user->logged_in = (bool)($last_activity > 0);

Иногда вам нужно будет сказать что-то. например "последний раз видели ...", затем оставьте последнее действие и просто добавьте логический флаг (tinyint) logged_in в таблицу пользователей.

0
ответ дан 4 December 2019 в 08:52
поделиться

This is an extension to what 'ceejayoz' said before.

Let the users periodically ping the service and tell that they are still logged in. Store last ping time in the session. If the last ping session is greater than a said time, then ping again to tell that the use is still alive.

Store the time when you received the ping in the database. If the last ping received is > the keeplive threshold then consider the user has left the site.

The following is some untested sample code for you start with. You can use the "PING__FREQUENCY" to control how often the frequency in which the user activity will update the last_activity column.

define(PING_FREQUENCY,300); //5 mins
if (($_SESSION['lastPingTime'] + PING_FREQUENCE) > time()) {
    stillLoggedIn(); //execute a function to tell that the user is still logged in
}

function stillLoggedIn() {
    //Do SQL update to mark the last activity time for the user
}
0
ответ дан 4 December 2019 в 08:52
поделиться

Вам интересно, можете ли вы определить, закрыл ли пользователь свой браузер. Вы можете использовать javascript, но я бы не стал на него полагаться (поскольку javascript легко отключить), но вы не можете этого сделать с PHP, поскольку PHP запускается только тогда, когда вы запрашиваете страницу. Не тогда, когда страница открыта.

В целях безопасности вы должны отслеживать последние действия пользователя, и если они прошли несколько минут (5/10), тогда предположите, что пользователь ушел. Если он что-то сделает снова (например, через 6 минут), то снова в сети.

2
ответ дан 4 December 2019 в 08:52
поделиться

Насколько я знаю, вы не можете проверить, когда человек закрывает окно браузера (или покидает вашу страницу, чтобы перейти на другую), поэтому вам нужно проверять активность, как было предложено выше.

0
ответ дан 4 December 2019 в 08:52
поделиться

Хранить метку времени каждой активности пользователя. Когда это время больше 10 минут назад, выполните выход.

В PHP вы можете сделать что-то вроде этого:

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();
} else {
    // update last activity timestamp
    $_SESSION['LAST_ACTIVITY'] = time();
}

То же самое можно сделать с базой данных. Там вы даже можете получить список пользователей, которые «сейчас» в сети.

8
ответ дан 4 December 2019 в 08:52
поделиться

Дерево решений напрямую поддерживает этот вид приложений. Деревья решений обычно используются в искусственном интеллекте.

Дерево решений - это двоичное дерево, которое задает «лучший» вопрос на каждой ветви, чтобы различать коллекции, представленные его левыми и правыми дочерними элементами. Лучший вопрос определяется некоторым алгоритмом обучения, который используют создатели приложения «20 вопросов» для построения дерева. Затем, как указывают другие плакаты, дерево глубиной в 20 уровней дает вам миллион вещей.

Простой способ определить «лучший» вопрос в каждой точке - это найти свойство, которое наиболее равномерно делит коллекцию пополам. Таким образом, когда вы получите ответ да / нет на этот вопрос, вы избавитесь примерно от половины коллекции на каждом этапе. Таким образом вы можете приблизить двоичный поиск.

13
ответ дан 4 December 2019 в 08:52
поделиться

Было бы лучше использовать сеанс для отслеживания статуса входа в систему.

Прочтите эту информацию о сеансах

0
ответ дан 4 December 2019 в 08:52
поделиться

Возможно, лучше сохранить login = true в переменной сеанса чтобы проверить, вошел ли пользователь в систему. Это решит большинство ваших проблем;)

0
ответ дан 4 December 2019 в 08:52
поделиться

Почему бы вам не использовать для этого сеанс или файлы cookie вместо того, чтобы вставлять их в базу данных. Вы можете установить файлы cookie с помощью функции setcookie () или сделать сеанс доступным и сохранить в нем значение.

0
ответ дан 4 December 2019 в 08:52
поделиться

Обычно вы помещаете такую ​​информацию в сеансы.

$_SESSION['user'] = "A user name";

Затем, когда вы хотите выйти, вы делаете:

session_destroy();

Дополнительная информация о сеансах здесь и ] учебник .

0
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: