經驗交流

使用者登入

問題說明
 當我們將網站中的部份功能,改為需經身份認證方能使用時,您將需要一個使用者的「登入」機制,用來進行帳號密碼的檢查工作。

我的做法
 首先,我們需要提供一個 Form 給使用者,以便輸入其帳號與密碼。請注意:在下方的表單中,將以 POST method 來傳遞資料,以免將使用者的密碼洩露在網址列上。
......
......

<form method="post" name="login" action="check.php">
帳號:<input type="text" name="loginname"><br>
密碼:<input type="password" name="loginpswd"><br>
   <input type="submit" name="b1" value="登入">
</form>

......
......

 其次,我們在 check.php 中,根據使用者的輸入值進行比對。確定其帳號密碼無誤時,以 Header 函數,將使用者重導至主作業畫面;否則,就導向錯誤警告的畫面。
<?
// 比對其帳號與密碼
$sql = "SELECT count(*) FROM user ";
$sql .= "WHERE username = '$loginname' ";
$sql .= "AND password = '$loginpswd' ";
$rs = mysql_db_query($cfgDatabaseName, $sql, $link);
list($nT) = mysql_fetch_row($rs);

// 依檢查結果分別導向主作業畫面與錯誤警告畫面
if ( $nT ) {
  Header("location:main.php");
  exit;
}
else {
  Header("location:error.php");
  exit;
}
?>

 當使用者成功登入之後,為了方便其他程式來辨識他,我們可以使用 session 的功能,記錄此人的資訊。如此一來,上一段程式將修改如下:
<?
// 比對其帳號與密碼
$sql = "SELECT realname, userlevel FROM user ";
$sql .= "WHERE username = '" . $loginname . "' ";
$sql .= "AND password = '" . $loginpswd . "' ";
$rs = mysql_db_query($cfgDatabaseName, $sql, $link);
$nT = mysql_num_rows($rs);

// 依檢查結果分別導向主作業畫面與錯誤警告畫面
if ( $nT ) {
  list($realname, $userlevel) = mysql_fetch_row($rs);

  // 設定 session 變數之初值
  $_SESSION["ssnUSERNAME"]  = $loginname;
  $_SESSION["ssnREALNAME"]  = $realname;
  $_SESSION["ssnUSERLEVEL"] = $userlevel;

  Header("location:main.php");
  exit;
}
else {
  Header("location:error.php");
  exit;
}
?>
經驗交流