So melden Sie nur einen Benutzer in PHP an

藏色散人
Freigeben: 2023-03-17 16:36:01
Original
5532 Leute haben es durchsucht

So melden Sie sich nur für einen Benutzer in PHP an: 1. Initialisieren Sie den Socket im Uni-App-Frontend. 2. Erhalten Sie eine Nachricht vom Typ „erzwungenes Beenden“ in Echtzeit Parameter „Eindeutige Geräteidentifikation“ 4. Senden Sie die Nachricht einfach basierend auf der Client-ID im Cache.

So melden Sie nur einen Benutzer in PHP an

Die Betriebsumgebung dieses Tutorials: Windows 10-System, PHP-Version 8.1, Dell G3-Computer.

Wie melde ich mich nur für einen Benutzer in PHP an?

Uni-App kombiniert PHP, um eine Einzelbenutzeranmeldung zu erreichen. Das heißt, in einer Anwendung kann sich derselbe Benutzer nur einmal online anmelden , und ein Benutzer kann sich anmelden, es wird sofort auf anderen Geräten offline geschaltet. Löschen Sie nach der Bestätigung den Login-Ladevorgang auf dem Gerät und kehren Sie zur Anmeldeoberfläche zurück.

Uni-App kann derzeit Android, IOS, WeChat-Applet, Toutiao Alipay-Applet und H5 mithilfe des vue.js-Frameworks packen und muss nur eine Reihe von Codes schreiben. Durch die Verwendung des HBuilder-Tools ist es praktisch zum Debuggen und Cloud-Paketierung, empfehlen wir CW.PUB, https://cw.pub/index/document/index. Verwenden Sie HBuilder, um ein Jailbreak-Paket zu erstellen und es auf dieser Website zu signieren, um es auf einem normalen Apple-Telefon zu installieren. Es gibt jedoch andere Methoden im Internet, die hier nicht aufgeführt sind.

Im Allgemeinen verwenden APPs Nachrichten-Push-Plattformen von Drittanbietern für die Einzelbenutzeranmeldung, obwohl Uni-Apps auch eine Verbindung zu Push-Plattformen wie Umeng und Jiguang herstellen können. Aus Zeitgründen ist für die Überprüfung der Dockingplattform und andere Prozesse jedoch keine Zeit vorgesehen. Ich habe zuvor Gatewayworkman und Websocket für den Sofortchat verwendet, daher wird die Einzelbenutzeranmeldung auch über Websocket implementiert.

Uni-App-Socket-Einzelbenutzer-Anmeldebeispiel

1 Das Uni-App-Frontend sendet beim Initialisieren des Sockets die eindeutige Kennung des aktuellen Geräts und empfängt dann in Echtzeit eine Nachricht vom Typ „Force Exit“. Dies ist nur ein einfaches Beispiel.

//初始化
socket.on('init', () => { //连接初始化
socket.send({
type: 'login',
token: uni.getStorageSync('access_token'),
device_no: plus.device.uuid,//手机设备唯一编号
});
}).on('quit_push',(res)=> {
if(res) {
uni.showModal({
title: '退出通知',
content: '你的账号在其他设备上登录!',
showCancel: true,
cancelText: '取消',
confirmText: '确定',
success: res => {
if(res.confirm) {
uni.clearStorageSync()
store.commit('chat/clear')
uni.reLaunch({
url:"../../pages/login/index"
})
}else if(res.cancel) {
uni.clearStorageSync()
store.commit('chat/clear')
uni.reLaunch({
url:"../../pages/login/index"
})
}
}
});
}
});
Nach dem Login kopieren

2. Das Backend empfängt den Parameter „Geräte-Eindeutigkeit“ und prüft zunächst, ob der Cache vorhanden ist, der die Geräteidentifikation und den Socket aufzeichnet.

3. Die Anmeldeschnittstelle empfängt die Geräteidentifikation und der Identifikationsdatensatz wird aus dem Cache oder der Bibliothek abgerufen, um festzustellen, ob er mit der aktuell empfangenen Geräteidentifikation übereinstimmt. Wenn er inkonsistent ist, wird die Nachricht basierend auf gesendet clientid im Cache.

$is_online = Db::name('UserLoginClient')->where('user_id',$user['id'])->order('id desc')->find();
if(isset($device_no) && $device_no && $is_online['device_no'] != $device_no && !empty($is_online['device_no'])) { 
Tools::sendToClient($is_online['client_id'],json_encode([
'type' => 'quit_push',
'data' => 'ip',
'message' => '强制下线'
]));
}
Nach dem Login kopieren

4. Tool-Klasse sendToClient-Methodenteil

public static function sendToClient($client_id, $message)
    {
        Gateway::sendToClient($client_id, $message);
    }
Nach dem Login kopieren

Push-Einzelbenutzer-Anmeldung

1. Zuerst haben wir eine Verbindung mit Umeng hergestellt, einschließlich des Front-Ends und des Back-Ends, das Hinzufügen von SDK und die Verwendung ihrer Methoden.

2. Message Push hat einen eindeutigen Wert „Token“, hier als „Pushtoken“ bezeichnet, der vom Client generiert wird und ein eindeutiges Gerät identifizieren kann.

3. Wenn sich das Backend anmeldet, erhält es den Pushtoken und stellt außerdem fest, ob der Pushtoken vorhanden ist. Wenn er nicht vorhanden ist, wird er mit der Benutzer-ID als Schlüssel gespeichert.

4. Wenn es vorhanden ist, wird beurteilt, ob es mit dem Cache übereinstimmt. Wenn es konsistent ist, wird die Cache-Zeit verlängert. Wenn es inkonsistent ist, wird eine Nachricht an den alten Pushtoken gesendet im Cache) und das neue Pushtoken wird zwischengespeichert.

if (self::$headToken && Cache::has(self::$prefix . self::$userId)) {
            if (self::$headToken == Cache::get(self::$prefix . self::$userId)) {
                Cache::set(self::$prefix . self::$userId, self::$headToken, self::$timeOut);
            } else {        // 换了手机,客户端重新发送pushtoken到服务端,服务端与缓存中的pushtoken比较,不同则给原来pushtoken手机推送一条并重新缓存新的token
                // modify by wensen on 20180816
                // $addr = getCity();
                $addr = getMobCity();
                $ip = request()->ip();
                
                if ($addr) {
                    $addr['province'] = empty($addr['province']) ? '' : $addr['province'];
                    $addr['city'] = empty($addr['city']) ? '' : $addr['city'];
                    // $address = "\t" . $addr['country'] . "-" . $addr['region'] . "-" . $addr['city'] . " (IP:" . $ip . ")\t";
                    $address = "\t" . $addr['country'] . "-" . $addr['province'] . "-" . $addr['city'] . " (IP:" . $ip . ")\t";
                } else {
                    $address = "IP:" . $ip . "";
                }
                $OldToken = Cache::get(self::$prefix . self::$userId);
                if (strlen($OldToken) == 64) {
                    $content = array(
                        'title' => 'APP紧急通知',
                        'body' => '您的账号于:' . date('Y-m-d H:i:s') . '在' . $address . '处登录,若不为您本人登录,请您立即修改密码!',
                        'pull_service' => 'login'
                    );
                    \umeng\Push::send($OldToken, 'unicast', $content, 'message', true);
                } elseif (strlen($OldToken) == 44) {
                    $content = array(
                        'pull_service' => 'login',
                        'msg' => '您的账号于:' . date('Y-m-d H:i:s') . '在' . $address . '处登录,若不为您本人登录,请您立即修改密码!'
                    );
                    \umeng\Push::send($OldToken, 'unicast', $content, 'message', true);
                }
                Cache::set(self::$prefix . self::$userId, self::$headToken, self::$timeOut);
            }
        } else {
            Cache::set(self::$prefix . self::$userId, self::$headToken, self::$timeOut);
        }
Nach dem Login kopieren

5. Der APP-Client erhält Push-Benachrichtigungen für Popup-Eingabeaufforderungen und Exit-Verarbeitung.

6. Das Obige ist die Push-Methode, die gemäß Umengs SDK gekapselt ist und Unicast, Broadcast, springende Anwendungsaktivität, springende Webseitenverbindung usw. umfasst.

Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo melden Sie nur einen Benutzer in PHP an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!