Rumah > pembangunan bahagian belakang > masalah PHP > Bagaimana untuk log masuk hanya satu pengguna dalam php

Bagaimana untuk log masuk hanya satu pengguna dalam php

藏色散人
Lepaskan: 2023-03-17 16:36:01
asal
5584 orang telah melayarinya

Cara untuk log masuk hanya satu pengguna dalam PHP: 1. Mulakan soket di hujung hadapan uni-app 2. Terima mesej jenis "force exit" dalam masa nyata 3. Gunakan bahagian belakang PHP untuk terima parameter "Unik peranti" "Pengenalan" 4. Hantar mesej mengikut id pelanggan dalam cache.

Bagaimana untuk log masuk hanya satu pengguna dalam php

Persekitaran pengendalian tutorial ini: sistem Windows 10, PHP versi 8.1, komputer Dell G3.

Bagaimana untuk log masuk hanya satu pengguna dalam php?

uni-app menggabungkan PHP untuk mencapai log masuk pengguna tunggal

Log masuk pengguna tunggal, iaitu, dalam aplikasi, pengguna yang sama hanya boleh log masuk sekali dalam talian Jika pengguna log masuk, dia akan ditolak ke luar talian serta-merta pada peranti lain Selepas pengesahan, kosongkan pemuatan log masuk pada peranti dan kembali ke antara muka log masuk.

uni-app pada masa ini boleh membungkus Android, IOS, applet WeChat, applet Toutiao Alipay dan H5 dengan menggunakan rangka kerja vue.js dan hanya perlu menulis satu set kod Ia mudah untuk nyahpepijat dan awan pembungkusan dengan menggunakan alat HBuilder , Mengenai sijil Apple, kami mengesyorkan CW.PUB, https://cw.pub/index/document/index. Gunakan HBuilder untuk mencipta pakej jailbreak dan tandatangani pada tapak web tersebut untuk memasangnya pada telefon Apple biasa Walau bagaimanapun, terdapat kaedah lain di Internet yang tidak disenaraikan di sini.

Secara amnya, APP akan menggunakan platform tolak mesej pihak ketiga untuk log masuk pengguna tunggal, walaupun uni-app juga boleh menyambung ke platform tolak seperti Umeng dan Jiguang. Tetapi masih disebabkan oleh masa, semakan platform dok dan proses lain tidak membenarkan masa. Saya menggunakan gatewayworkman dan websocket untuk melakukan sembang segera sebelum ini, jadi log masuk pengguna tunggal juga dilaksanakan menggunakan websocket.

Contoh log masuk pengguna tunggal soket Uni-apl

1 Bahagian hadapan uni-apl menghantar pengecam unik peranti semasa apabila memulakan soket, dan kemudian menerima "keluar paksa" dalam masa nyata " jenis mesej hanyalah contoh mudah.

//初始化
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"
})
}
}
});
}
});
Salin selepas log masuk

2 Bahagian belakang menerima parameter "pengecam unik peranti" dan mula-mula menyemak sama ada cache wujud Tiada id pelanggan yang merekodkan pengecam dan soket peranti.

3. Antara muka log masuk menerima pengenalan peranti dan rekod pengenalan diambil daripada cache atau pustaka untuk menentukan sama ada ia konsisten dengan pengenalan peranti yang diterima sekarang , mesej dihantar berdasarkan klien dalam 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' => '强制下线'
]));
}
Salin selepas log masuk

4. Bahagian kaedah sendToClient kelas alatan

public static function sendToClient($client_id, $message)
    {
        Gateway::sendToClient($client_id, $message);
    }
Salin selepas log masuk

Tekan contoh log masuk pengguna tunggal

1. Mula-mula, kami berhubung dengan Umeng, termasuk menambahkan SDK pada bahagian hadapan dan belakang serta menggunakan kaedah mereka.

2. Message push mempunyai nilai unik "token", di sini dirujuk sebagai "pushtoken", yang dijana oleh pelanggan dan boleh mengenal pasti peranti unik.

3. Apabila bahagian belakang log masuk, ia menerima pushtoken dan juga menentukan sama ada pushtoken wujud Jika ia tidak wujud, ia akan disimpan dengan ID pengguna sebagai kunci.

4. Apabila ia wujud, ia akan dinilai sama ada ia konsisten dengan cache Jika ia konsisten, masa cache akan dilanjutkan ditolak ke pushtoken lama (dalam cache) dan pushtoken baharu akan dicache.

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);
        }
Salin selepas log masuk

5 Klien APP menerima tolakan dan melakukan gesaan pop timbul dan pemprosesan keluar.

6 Di atas adalah kaedah tolak yang dirangkumkan mengikut SDK Umeng, termasuk aktiviti aplikasi unicast, penyiaran, melompat, sambungan halaman web melompat, dll.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk log masuk hanya satu pengguna dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan