登錄頁面
login.html 負責收集用戶填寫的登錄信息。
1 <fieldset> 2 <legend>用戶登錄</legend> 3 <form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)"> 4 <p> 5 <label for="username" class="label">用戶名:</label> 6 <input id="username" name="username" type="text" class="input" /> 7 <p/> 8 <p> 9 <label for="password" class="label">密 碼:</label> 10 <input id="password" name="password" type="password" class="input" /> 11 <p/> 12 <p> 13 <input type="submit" name="submit" value=" 確 定 " class="left" /> 14 </p> 15 </form> 16 </fieldset>
javascript 檢測及 CSS 樣式可參考 reg.html,本部分略去,可直接查看最后附錄的完整代碼。
登錄處理
login.php 負責處理用戶登錄與退出動作。
1 //登錄 2 if(!isset($_POST['submit'])){ 3 exit('非法訪問!'); 4 } 5 $username = htmlspecialchars($_POST['username']); 6 $password = MD5($_POST['password']); 7 8 //包含數據庫連接文件 9 include('conn.php'); 10 //檢測用戶名及密碼是否正確 11 $check_query = mysql_query("select uid from user where username='$username' and password='$password' limit 1"); 12 if($result = mysql_fetch_array($check_query)){ 13 //登錄成功 14 $_SESSION['username'] = $username; 15 $_SESSION['userid'] = $result['uid']; 16 echo $username,' 歡迎你!進入 <a href="my.php">用戶中心</a><br />'; 17 echo '點擊此處 <a href="login.php?action=logout">注銷</a> 登錄!<br />'; 18 exit; 19 } else { 20 exit('登錄失敗!點擊此處 <a href="javascript:history.back(-1);">返回</a> 重試'); 21 }
該段代碼首先確認如果是用戶登錄的話,必須是 POST 動作提交。然后根據用戶輸入的信息去數據庫核對是否正確,如果正確,注冊 session 信息,否則提示登錄失敗,用戶可以重試。
該段代碼需要在頁面開頭啟用 session_start() 函數,參見下面 退出處理 代碼部分。
退出處理
處理用戶退出的代碼跟處理登錄的代碼都在 login.php 里。
1 session_start(); 2 3 //注銷登錄 4 if($_GET['action'] == "logout"){ 5 unset($_SESSION['userid']); 6 unset($_SESSION['username']); 7 echo '注銷登錄成功!點擊此處 <a href="login.html">登錄</a>'; 8 exit; 9 }
該段代碼在處理用戶登錄的代碼之前,只允許以 login.php?action=logout 的方式訪問,其他方式都認為是檢測用戶登錄。具體邏輯參看附錄完整代碼。
用戶中心
my.php 是用戶中心,列在教程里作為用戶登錄檢測參考。
1 <?php 2 session_start(); 3 4 //檢測是否登錄,若沒登錄則轉向登錄界面 5 if(!isset($_SESSION['userid'])){ 6 header("Location:login.html"); 7 exit(); 8 } 9 //包含數據庫連接文件 10 include('conn.php'); 11 $userid = $_SESSION['userid']; 12 $username = $_SESSION['username']; 13 $user_query = mysql_query("select * from user where uid=$userid limit 1"); 14 $row = mysql_fetch_array($user_query); 15 echo '用戶信息:<br />'; 16 echo '用戶ID:',$userid,'<br />'; 17 echo '用戶名:',$username,'<br />'; 18 echo '郵箱:',$row<'email'>,'<br />'; 19 echo '注冊日期:',date("Y-m-d", $row['regdate']),'<br />'; 20 echo '<a href="login.php?action=logout">注銷</a> 登錄<br />'; 21 ?>
提示
- 用戶注冊登錄涉及到用戶信息與數據庫的交互,因此要特別注意用戶提交的信息不能為非法信息,本例中注冊部分已經使用正則表達式做了限制,對登錄部分只簡單使用了 htmlspecialchars() 處理,實際應用時可更嚴格一些。
- 本教程只是簡單演示用戶注冊與登錄的過程,其代碼僅供學習參考,不可直接用於項目生產。
- 本教程中對於用戶登錄成功后采用 session 來管理,也可以采用 cookie 來管理,尤其對於有時限要求的情況。
- 為了提高用戶體驗,用戶注冊部分可以結合 AJAX 來檢測用戶輸入的信息而不必等點擊提交后再檢測。