2011-08-29 30 views
0

這裏有幾個問題:我的最終目標是密碼保護文件logged_in.php。密碼保護頁面(使用db訪問)

注意:我只是一個初學者/中級程序員,所以我想要清楚的解釋。

首先,我已經在數據庫表中設置了用戶名和密碼。

  1. 我有兩個頁面:login.php和logged_in.php(名稱僅用於示例目的)。我如何「要求」用戶首先通過login.php(登錄進程)才能訪問logged_in.php(如果輸入的用戶名/密碼正確)?

  2. 這是密碼保護頁面的最佳方式嗎?

我已經試過:

的login.php:

<?php 
      $db_host="host"; 
      $db_user="user"; 
      $db_pass="pass"; 
      $db_name="name"; 
      $db_table="table"; 
      $user = mysql_real_escape_string(strip_tags($_POST['user'])); 
      $pass = mysql_real_escape_string(strip_tags($_POST['pass'])); 

      mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
      mysql_select_db($db_name) or die(mysql_error()); 

      if(isset($user) && isset($pass)) 
      { 
       $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'"; 
       $result = mysql_query($sql); 
       $count = mysql_num_rows($result); 
       if($count == 1) 
       { 
        header("location:logged_in.php"); 
       } 
       else 
        header("location:bad_login.html"); 
      } 
     ?> 
  • ,此刻我的代碼的問題是,有人能的URL直接鍵入logged_in.php和訪問頁面,而不需要「必須」先通過login.php(我確定這是顯而易見的每個人..)。我的require(login.php);位於logged_in.php的頂部;然而,這並沒有奏效。

  • 我已經檢查谷歌一些很好的教程關於這個主題,不幸的是我找不到任何有明確的解釋。

  • 我還在stackoverflow上看到了關於此主題的其他一些問題,但他們並沒有真正幫助我。

我也有興趣在能夠通過保護使用方法phpMyAdmin的使用我的網頁(當你在URL,然後按類型輸入它就向下從瀏覽器的要求一個頂部的菜單用戶名密碼)。我不知道那是如何工作的。如果有人能告訴我這是如何工作的,我願意完全忽略我現在嘗試使用的方法(如果phpMyAdmin方法足夠安全並且相當容易實現)。

在此先感謝!

+1

只是一個興趣點:在連接到MySQL之前調用mysql_real_escape_string()。該功能需要連接到MySQL(請參閱doc)。你應該把你的'mysql_connect()'行增加3行。 – Ozzah

+1

*一般建議不保證答案:*初學者或沒有,閱讀PDO代替'mysql_ *'函數;我在一段時間之前轉過身,從不回頭。此外,* Location *'header()'「需要」一個絕對URI(*,例如'http:// server/path/to/resource';它不會「要求」它,因此引號,但一些用戶代理可能無法正確重定向*) – Dan

+0

@Ozzah謝謝你讓我知道。 – corecase

回答

2

使用$ _SESSION變量:

<?php 

      session_start(); 

      $db_host="host"; 
      $db_user="user"; 
      $db_pass="pass"; 
      $db_name="name"; 
      $db_table="table"; 

      mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
      mysql_select_db($db_name) or die(mysql_error()); 

      $user = mysql_real_escape_string(strip_tags($_POST['user'])); 
      $pass = mysql_real_escape_string(strip_tags($_POST['pass'])); 

      if(isset($user) && isset($pass)) 
      { 
       $sql = "SELECT * FROM $db_table WHERE username='$user' AND password='$pass'"; 
       $result = mysql_query($sql); 
       $count = mysql_num_rows($result); 
       if($count == 1) 
       { 
        $_SESSION['username'] = $user; 
        header("location:logged_in.php"); 
        exit(); 
       } 
       else 
        header("location:bad_login.html"); 
        exit(); 
      } 
     ?> 

logged_in.php:

<?php 

session_start(); 

// check if $_SESSION was setting before 
if (!isset($_SESSION['username'])) 
{ 
    header("Location: login.php?e=access_denied"); 
    exit(); 
} 
?> 

phpMyAdmin的登錄是不同的,因爲使用MySQL的用戶名和密碼登錄,所以phpMyAdmin的並不需要創建一個數據庫和表登錄喜歡你的代碼

你也需要註銷:

註銷。php

<?php 

session_start(); // <-- Oops!! 

// unset all $_SESSION variables 
session_unset(); 
session_destroy(); 
header("Location: logged_in.php?m=logout_success"); 
exit; 

?> 
+0

非常感謝。 :) – corecase

+0

@corecase歡迎您! – tttony

+0

由於某種原因,我無法得到logout.php工作..這裏是我的代碼:logged_in.php:

\t Log Out
logout.php正是你在你的答案中做到這一點.. – corecase