<?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)