php实现单个用户禁止重复登录,防止同一用户同时登陆
生活随笔
收集整理的這篇文章主要介紹了
php实现单个用户禁止重复登录,防止同一用户同时登陆
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
<?php
session_start();
//ini_set('session.auto_start', 0); //關(guān)閉session自動(dòng)啟動(dòng)
//ini_set('session.cookie_lifetime', 0);//設(shè)置session在瀏覽器關(guān)閉時(shí)失效
//ini_set('session.gc_maxlifetime', 3600); //session在瀏覽器未關(guān)閉時(shí)的持續(xù)存活時(shí)間 //防止同一用戶的重復(fù)登錄
$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=zxheader("Content-type:text/html;charset=utf-8");$username =$_GET['name'];$password =$_GET['pwd'];//$ipdress = $_SERVER['REMOTE_ADDR'];
//
//$login_time = time();//登陸時(shí)間更新
//
//$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);//權(quán)限驗(yàn)證的時(shí)候一定要判斷數(shù)據(jù)庫寫入session_id是不是和$_session里面的session_id是不是一致,如果不一致就退出,這個(gè)防止同一個(gè)賬戶被多個(gè)人同時(shí)登陸的實(shí)現(xiàn)方法就是基于這個(gè)session_id
//一定要設(shè)置session的存活時(shí)間,和session關(guān)掉頁面就session消除
//如果有其他人登陸的時(shí)候,會(huì)寫入新的session_id,這樣舊的用戶就會(huì)被權(quán)限驗(yàn)證不通過,但是不能做到實(shí)時(shí)效果,這樣就擠掉了舊用戶,這里有個(gè)缺陷,就是每次驗(yàn)證權(quán)限的時(shí)候就需要查詢數(shù)據(jù)庫,如果可以吧這個(gè)數(shù)據(jù)放在redis就比較好
//其實(shí)其他的驗(yàn)證方法,也類似使用這種方法,有個(gè)驗(yàn)證的憑證,只不過這種方法需要查詢數(shù)據(jù)庫,但是放在redis之后就比較好
//或者統(tǒng)一管理session的時(shí)候,比如放在數(shù)據(jù)庫就更好了,記住吧session_id也存入數(shù)據(jù)庫,或者放在memcash,redis就比較方便,比如在redis進(jìn)行管理的時(shí)候,就可以直接更新掉存在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();//重新賦予一個(gè)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';}
?數(shù)據(jù)庫結(jié)構(gòu)
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)
轉(zhuǎn)載于:https://www.cnblogs.com/zx-admin/p/4444426.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的php实现单个用户禁止重复登录,防止同一用户同时登陆的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java转iOS-第一个项目总结(2)
- 下一篇: 一段JAVA签名算法的PHP改写