PHP自動登入的實現思路一般為使用cookie進行狀態驗證。網上和ecshop等系統對於自動登入的實現思路具體為單純設定cookie的uid、username、password
查看 複製 列印 ? //檢查使用者是否登入 function checklogin(){ if(emptyempty($_SESSION['user_info'])){ //檢查一下session是不是為空白 if(emptyempty($_COOKIE['username']) || emptyempty($_COOKIE['password'])){ //如果session為空白,並且使用者沒有選擇記錄登入狀 header("location:login.php?req_url=".$_SERVER['REQUEST_URI']); //轉到登入頁面,記錄請求的url,登入後跳轉過去,使用者體驗好。 }else{ //使用者選擇了記住登入狀態 $user = getUserInfo($_COOKIE['username'],$_COOKIE['password']); //去取使用者的設定檔 if(emptyempty($user)){ //使用者名稱密碼不對沒到取到資訊,轉到登入頁面 header("location:login.php?req_url=".$_SERVER['REQUEST_URI']); }else{ $_SESSION['user_info'] = $user; //使用者名稱和密碼對了,把使用者的設定檔放到session裡面 } } }
這樣的設定會留下很大的安全隱患,暴露使用者資訊給系統造成安全隱患。
更為安全的實現思路為:使用對需要放置cookie裡面的資料使用單向的加密以及token和salt進行校正。
1.cookie名:uid。推薦進行加密,比如MD5('網站名稱')等。
2.cookie值:登入名稱|有效時間Expires|hash值。hash值可以由"登入名稱+有效時間Expires+使用者密碼(加密後的)的前幾位+salt",salt是保證在伺服器端網站設定檔中的隨機數。
這樣子設計有以下幾個優點:
1.即使資料庫被盜了,盜用者還是無法登入到系統,因為組成cookie值的salt是保證在伺服器網站設定檔中而非資料庫。
2.如果賬戶被盜了,使用者修改密碼,可以使盜用者的cookie值無效。
3.如果伺服器端的資料庫被盜了,通過修改salt值可以使所有使用者的cookie值無效,迫使使用者重新登入系統。
4.有效時間Expires可以設定為目前時間+過去時間(比如2天),這樣可以保證每次登入的cookie值都不一樣,防止盜用者窺探到自己的cookie值後作為後門,長期登入。