本文實(shí)例講述了PHP實(shí)現(xiàn)會(huì)員賬號(hào)單唯一登錄的方法。分享給大家供大家參考,具體如下:
情景再現(xiàn)
同一會(huì)員賬號(hào)限制在同一臺(tái)設(shè)備(電腦、手機(jī)、Ipad等)上單點(diǎn)登錄,重復(fù)登錄后,原登錄訪問(wèn)頁(yè)面時(shí)則直接跳轉(zhuǎn)到登錄頁(yè)面且需要重新登錄才能正常訪問(wèn)。
原理分析
A賬號(hào)在A電腦上登錄后,A賬號(hào)此時(shí)又用B電腦再次登錄,則A電腦請(qǐng)求頁(yè)面時(shí),提示“重新登錄”的信息,并跳轉(zhuǎn)到登錄頁(yè)面
思路解析:
A賬號(hào)在A電腦上登錄后,把SESSION ID寫入TXT文件,每次訪問(wèn)頁(yè)面時(shí),都做一次校驗(yàn)(比較txt文件的值是否和當(dāng)前登錄的session_id的值相同)
實(shí)例
1、入口與校驗(yàn)(index.php)
?php
session_start();
$uid = 10;
if(is_login($uid)){
header('location:loginSuccess.php');
}else{
$getLogSessionId = file_get_contents('session_log/'.$uid.'.txt');
if($getLogSessionId){
echo "已在其他地方登錄,請(qǐng)重新登錄";
echo "br>";
echo "5秒后跳轉(zhuǎn)到登錄頁(yè)面!";
header("refresh:5;url=login.php");
}else{
echo '第一次登錄...';
echo "br>";
echo "3秒鐘后跳轉(zhuǎn)到登錄頁(yè)面!";
header("refresh:3;url=login.php");
}
}
/**
* 通過(guò)登錄時(shí)寫入文件session_id和當(dāng)前登錄設(shè)備后生成的session_id進(jìn)行比較,相同則是同一臺(tái)設(shè)備登錄,不同則在別的地方登錄
*/
function is_login($uid){
$getLogSessionId = file_get_contents('session_log/'.$uid.'.txt');
if($getLogSessionId == session_id()){
return true;
}else{
return false;
}
}
2、登錄(login.php)
?php
session_start();
echo "登錄中....";
echo 'br>';
$uid = 10;
file_put_contents('session_log/'.$uid.'.txt',session_id());
echo "登錄完成";
3、登錄成功(loginSuccess.php)
4、保存sessionId文件夾(session_log),測(cè)試代碼,需要手動(dòng)建一個(gè)或者賦予自動(dòng)生成文件的權(quán)限
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php緩存技術(shù)總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- 使用PHP uniqid函數(shù)生成唯一ID
- PHP之uniqid()函數(shù)用法
- PHP實(shí)現(xiàn)的生成唯一RequestID類完整示例
- 完美解決thinkphp唯一索引重復(fù)時(shí)出錯(cuò)的問(wèn)題
- PHP生成唯一ID之SnowFlake算法
- 3種php生成唯一id的方法
- PHP實(shí)現(xiàn)生成唯一會(huì)員卡號(hào)
- PHP生成唯一訂單號(hào)
- PHP隨機(jī)生成唯一HASH值自定義函數(shù)
- PHP生成唯一訂單號(hào)的方法匯總
- 高并發(fā)php uniqid不重復(fù)唯一標(biāo)識(shí)符生成方案