php實現單個用戶禁止重復登錄,防止同一用戶同時登陸


<?php
session_start();
//ini_set('session.auto_start', 0);                    //關閉session自動啟動
//ini_set('session.cookie_lifetime', 0);//設置session在瀏覽器關閉時失效
//ini_set('session.gc_maxlifetime', 3600);  //session在瀏覽器未關閉時的持續存活時間 


//防止同一用戶的重復登錄
$server = '127.0.0.1';
$username = 'root';
$password = '';
$conn = mysql_connect($server, $username, $password);
$e = mysql_select_db('test',$conn);
mysql_query("SET NAMES UTF8");

//訪問url,http://www.test.com/single_login.php?name=zx&pwd=zx

header("Content-type:text/html;charset=utf-8");

$username =$_GET['name'];

$password =$_GET['pwd'];

//$ipdress = $_SERVER['REMOTE_ADDR'];
//
//$login_time = time();//登陸時間更新
//
//$session_id = session_id();
//
//$_SESSION['name']=$_GET['name'];

//var_dump($session_id);

//$sql = "INSERT INTO tongji VALUES ('NULL','$data_id','$time','$ipdress','$session_id')";

//$result =mysql_query($sql);

$sql = "select * from slogin where username = '$username' and password = '$password'";
//var_dump($sql);
$result =mysql_query($sql);
$s = mysql_fetch_array($result);

//權限驗證的時候一定要判斷數據庫寫入session_id是不是和$_session里面的session_id是不是一致,如果不一致就退出,這個防止同一個賬戶被多個人同時登陸的實現方法就是基於這個session_id
//一定要設置session的存活時間,和session關掉頁面就session消除
//如果有其他人登陸的時候,會寫入新的session_id,這樣舊的用戶就會被權限驗證不通過,但是不能做到實時效果,這樣就擠掉了舊用戶,這里有個缺陷,就是每次驗證權限的時候就需要查詢數據庫,如果可以吧這個數據放在redis就比較好
//其實其他的驗證方法,也類似使用這種方法,有個驗證的憑證,只不過這種方法需要查詢數據庫,但是放在redis之后就比較好
//或者統一管理session的時候,比如放在數據庫就更好了,記住吧session_id也存入數據庫,或者放在memcash,redis就比較方便,比如在redis進行管理的時候,就可以直接更新掉存在session_id
if($s){
//    var_dump($s);
//    echo '<br>';
//    echo session_id();
    if($s['session_id'] === session_id()){
      //unset($s['session_id']);
    }  else {
        $ipdress = $_SERVER['REMOTE_ADDR'];
        $login_time = time();
        $session_id = session_id();//重新賦予一個session_id
        $sql = "update slogin set ip = '$ipdress',login_time= '$login_time',session_id = '$session_id'"; 
        $result1 =mysql_query($sql);
       // $ss = mysql_fetch_array($result);
        if($result1){
            echo 'OK';
            
        }  else {
            echo 'F';
        }
    }
    
    
    
}else {
    
    echo 'FFFFFFFFFFFFFFFFFFFFFFF';
    
    
}

 數據庫結構

1 id int(11) AUTO_INCREMENT
2 username varchar(20) utf8_general_ci
3 password varchar(20) utf8_general_ci
4 ip varchar(20) utf8_general_ci
5 session_id varchar(100) utf8_general_ci
6 login_time int(20)
7 regist_time int(20)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM