1. 程式人生 > >php實現記住密碼下次自動登陸

php實現記住密碼下次自動登陸

這篇部落格裡面還寫到 實現“記住我的登入狀態”的功能方法,簡言之,就是對首先對session進行使用者資訊賦值,檢測session,失效後,利用cookie對其賦值;

  在實現過程中,根據網上一些程式碼貼,整理出以下程式碼:另外可以參考PHP 登入記住密碼實現思路

 

在登入login.php頁面中,進行表單設定:

複製程式碼
<?php
session_start();
?>
<form action="login_chk.php" method="post">   <div class="inpu">     <input id="username" name="username" type="text" class="username" value="<?php if($_SESSION['type'] == 1){echo $_SESSION['number'];}else{echo $_SESSION['name'];}?>" placeholder="使用者名稱">   </div>   <div class="inpu">     <input id="pass" name="pass" type="password" class="password" placeholder="登入密碼" >   </div>   <div class="remember">     <input class="inpu_remember" type="checkbox" name="remember" ><label>記住我</label>   </div>   <button id="submit" type="submit">登入</button> </form>
複製程式碼

 

login_chk.php頁面用於驗證登入頁面表單資訊,並建立cookie:

複製程式碼
 1 <?php
 2 header("Content-type:text/html;charset=gb2312");
 3  4 session_start();  5 include_once("conn/conn.php"); //載入資料庫連線檔案  6  7 error_reporting(0);  8  9 if(empty($_POST['username']) or empty($_POST['pass'])){ 10 echo "<script language='javascript'>alert('使用者名稱和密碼不能為空!');history.go(-1);</script>"; 11 } 12 else{ 13 $username=$_POST['username']; 14 $pass=$_POST['pass']; 15 $password = md5($pass); 16 $remember = $_POST['remember']; 17 18 $testrst = sqlsrv_query($conn, "select * from Employee where name like '$username' or number like '$username'"); //執行查詢操作 19 20 if(!empty($remember)){ //如果使用者選擇了,記錄登入狀態就把使用者名稱和加了密的密碼放到cookie裡面 21 setcookie("username", $username, time()+3600*24*30); 22 setcookie("password", $pass, time()+3600*24*30); 23  } 24 25 26 27 28 29 if(sqlsrv_has_rows($testrst)){ 30 31 $rst = sqlsrv_query($conn, "select * from Employee where (name like '$username' or number like '$username') and pwd = '$password'"); 32 33 34 if(sqlsrv_has_rows($rst)){ //判斷登入使用者名稱和密碼是否正確 35 $adminrow = sqlsrv_fetch_array($rst); 37 $userwhethe = 0; 38 $_SESSION['id']=$adminrow[0]; 41 $_SESSION['number']=$adminrow[1]; 42 $_SESSION['name']=$adminrow[2]; 43 if($username == $adminrow[1]){ 44   $_SESSION['type'] = 1; 45 }else{ 46 $_SESSION['type'] = 2; 47  }57 59 echo "<meta http-equiv=\"refresh\" content=\"0;url=menu.php\" />"; 60 64   }else{ 65   echo "<script>alert('密碼錯誤,請重新登入。');history.go(-1);</script>"; 66    } 67  }else{ 68    echo "<script>alert('該使用者名稱不存在!,請重新登入。');history.go(-1);</script>"; 69    } 70 } 71 72 ?>
複製程式碼

menu.php以及其他功能頁面都會檢查一遍session:

複製程式碼
 1 <?php
 2 session_start();
 3 include_once("conn/conn.php");  4 error_reporting(0);  5 if(empty($_SESSION['name']) and empty($_SESSION['id'])){ //判斷當前使用者是否為登入狀態  6 echo "<script>alert('請登入後再進行執行操作!');history.go(-1);</script>";  7 }else{  8 ?>  9 網頁主體 10 ?>
複製程式碼

至於檢驗sessionf,失效利用cookie進行賦值的操作,在index1.php(index的檢查頁)中實現:

複製程式碼
 1 <?php
 2 session_start();
 3  4 if(empty($_SESSION['username'])){ //檢查一下session是不是為空  5 if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){  6 header("location:login.php");  7 }else{  8 $_SESSION['name'] = $_COOKIE['username'];  9 header("location:menu.php"); 10  } 11 12  } 13 ?>
複製程式碼

另外,考慮到使用者有退出系統或者登出再登入的需要,設定了退出頁面logout.php:

複製程式碼
1 <?php
2 session_start();
3 unset($_SESSION['username']); 4 unset($_SESSION['password']); 5 setcookie('username','',0); 6 setcookie('password','',0); 7 header("location:index.php"); 8 ?> 
複製程式碼

  實現後,使用流暢。但對密碼的cookie和session儲存感覺不是很恰當,在使用者登入介面也沒有對密碼錶單進行值得預設儲存,這個方面的功能還需要完善。