本文實(shí)例講述了php實(shí)現(xiàn)會員賬號單唯一登錄的方法。分享給大家供大家參考,具體如下:
情景再現(xiàn)
同一會員賬號限制在同一臺設(shè)備(電腦、手機(jī)、ipad等)上單點(diǎn)登錄,重復(fù)登錄后,原登錄訪問頁面時則直接跳轉(zhuǎn)到登錄頁面且需要重新登錄才能正常訪問。
原理分析
a賬號在a電腦上登錄后,a賬號此時又用b電腦再次登錄,則a電腦請求頁面時,提示“重新登錄”的信息,并跳轉(zhuǎn)到登錄頁面
思路解析:
a賬號在a電腦上登錄后,把session id寫入txt文件,每次訪問頁面時,都做一次校驗(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 已在其他地方登錄,請重新登錄;
echo <br>;
echo 5秒后跳轉(zhuǎn)到登錄頁面!;
header(refresh:5;url=login.php);
}else{
echo '第一次登錄...';
echo <br>;
echo 3秒鐘后跳轉(zhuǎn)到登錄頁面!;
header(refresh:3;url=login.php);
}
}
/
* 通過登錄時寫入文件session_id和當(dāng)前登錄設(shè)備后生成的session_id進(jìn)行比較,相同則是同一臺設(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)
<?php
echo 我登錄成功了!;4、保存sessionid文件夾(session_log),測試代碼,需要手動建一個或者賦予自動生成文件的權(quán)限