PHP에서 한 명의 사용자만 로그인하는 방법: 1. uni-app 프런트엔드에서 소켓을 초기화합니다. 2. 실시간으로 "강제 종료" 유형 메시지를 받습니다. 3. PHP 백엔드를 사용하여 메시지를 받습니다. "장치 고유 식별" 매개변수 4. 캐시의 클라이언트 ID를 기반으로 메시지를 보냅니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, PHP 버전 8.1, Dell G3 컴퓨터.
PHP에서 한 명의 사용자만 로그인하는 방법은 무엇입니까?
uni-app은 PHP를 결합하여 단일 사용자 로그인을 구현합니다.
단일 사용자 로그인, 즉 애플리케이션에서 동일한 사용자는 온라인에서 한 번만 로그인할 수 있습니다. , 한 명의 사용자가 로그인할 수 있으면 다른 기기에서는 즉시 오프라인으로 푸시됩니다. 확인 후 기기에서 로그인 로드를 지우고 로그인 인터페이스로 돌아갑니다.
uni-app은 현재 vue.js 프레임워크를 사용하여 Android, IOS, WeChat 애플릿, Toutiao Alipay 애플릿 및 H5를 패키징할 수 있으며, HBuilder 도구를 사용하면 코드 세트만 작성하면 됩니다. 및 클라우드 패키징에 대해서는 CW.PUB(https://cw.pub/index/document/index)을 권장합니다. HBuilder를 사용하여 탈옥 패키지를 생성하고 해당 웹사이트에 서명하여 일반 Apple 휴대폰에 설치합니다. 그러나 인터넷에는 여기에 나열되지 않은 다른 방법이 있습니다.
일반적으로 APP는 단일 사용자 로그인을 위해 타사 메시지 푸시 플랫폼을 사용하지만 uni-app은 Umeng 및 Jiguang과 같은 푸시 플랫폼에도 연결할 수 있습니다. 그러나 여전히 시간 문제로 인해 도킹 플랫폼 검토 및 기타 프로세스에 시간이 허용되지 않습니다. 이전에는 인스턴트 채팅을 할 때 Gatewayworkman과 websocket을 사용했기 때문에 단일 사용자 로그인도 websocket을 사용하여 구현되었습니다.
Uni-app 소켓 단일 사용자 로그인 예시
1. uni-app 프론트 엔드는 소켓 초기화 시 현재 기기의 고유 식별자를 보낸 후 실시간으로 "강제 종료" 유형의 메시지를 받습니다. 이것은 단지 간단한 예일 뿐입니다.
//初始化 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" }) } } }); } });
2. 백엔드는 "장치 고유 식별" 매개변수를 수신하고 먼저 장치 식별 및 소켓을 기록하는 캐시가 존재하는지 확인합니다.
3. 로그인 인터페이스는 장치 식별을 수신하고, 식별 기록을 캐시 또는 라이브러리에서 검색하여 현재 수신된 장치 식별과 일치하지 않는지 확인합니다. 캐시의 클라이언트 ID입니다.
$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' => '强制下线' ])); }
4. 도구 클래스 sendToClient 메서드 부분
public static function sendToClient($client_id, $message) { Gateway::sendToClient($client_id, $message); }
Push 단일 사용자 로그인 예제
1 먼저 프런트엔드와 백엔드를 포함하여 SDK를 추가하고 해당 메서드를 사용하여 연결했습니다.
2. 메시지 푸시에는 클라이언트에 의해 생성되고 고유한 장치를 식별할 수 있는 고유한 값인 "토큰"이 있습니다.
3. 백엔드가 로그인하면 푸시토큰을 수신하고 푸시토큰이 존재하지 않는 경우 사용자 ID를 키로 저장합니다.
4. 캐시와 일치하는지 판단합니다. 일치하지 않으면 캐시 시간이 길어집니다. 캐시) 새 푸시 토큰이 캐시됩니다.
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); }
5. APP 클라이언트는 팝업 프롬프트 및 종료 처리에 대한 푸시 알림을 받습니다.
6위는 Umeng의 SDK에 따라 캡슐화된 푸시 방식으로 유니캐스트, 브로드캐스트, 점핑 애플리케이션 활동, 점핑 웹페이지 연결 등이 포함됩니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에서 한 명의 사용자만 로그인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 산 및 기본 데이터베이스 모델을 비교하여 특성과 적절한 사용 사례를 자세히 설명합니다. 산은 금융 및 전자 상거래 애플리케이션에 적합한 데이터 무결성 및 일관성을 우선시하는 반면 Base는 가용성 및

이 기사는 코드 주입과 같은 취약점을 방지하기 위해 PHP 파일 업로드 보안에 대해 설명합니다. 파일 유형 유효성 검증, 보안 저장 및 오류 처리에 중점을 두어 응용 프로그램 보안을 향상시킵니다.

기사는 내장 함수 사용, 화이트리스트 접근 방식 및 서버 측 유효성 검사와 같은 기술에 중점을 둔 보안을 향상시키기 위해 PHP 입력 유효성 검증에 대한 모범 사례를 논의합니다.

이 기사는 토큰 버킷 및 누출 된 버킷과 같은 알고리즘을 포함하여 PHP에서 API 요율 제한을 구현하고 Symfony/Rate-Limiter와 같은 라이브러리 사용 전략에 대해 설명합니다. 또한 모니터링, 동적 조정 요율 제한 및 손도 다룹니다.

이 기사에서는 PHP에서 암호를 보호하기 위해 PHP에서 Password_hash 및 Password_Verify 사용의 이점에 대해 설명합니다. 주요 주장은 이러한 기능이 자동 소금 생성, 강한 해싱 알고리즘 및 Secur를 통해 암호 보호를 향상 시킨다는 것입니다.

이 기사는 PHP 및 완화 전략의 OWASP Top 10 취약점에 대해 설명합니다. 주요 문제에는 PHP 응용 프로그램을 모니터링하고 보호하기위한 권장 도구가 포함 된 주입, 인증 파손 및 XSS가 포함됩니다.

이 기사는 PHP의 XSS 공격을 방지하기위한 전략, 입력 소독, 출력 인코딩 및 보안 향상 라이브러리 및 프레임 워크 사용에 중점을 둔 전략에 대해 설명합니다.

이 기사는 각각의 사용시기에 중점을 둔 PHP의 인터페이스 및 추상 클래스 사용에 대해 설명합니다. 인터페이스는 관련없는 클래스 및 다중 상속에 적합한 구현없이 계약을 정의합니다. 초록 클래스는 일반적인 기능을 제공합니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
