2011-07-17 236 views
0

我是PHP新手。作爲新手,我開始了我的第一個項目。我爲我的webapp做了一個登錄系統。但是有一個問題。當我嘗試訪問索引或主頁面時,它要求登錄,但是當我嘗試訪問其他頁面時,它不會要求我登錄。登錄系統使用PHP

如何管理所有頁面的相同限制? 我的登錄碼在這裏。

<? 
$connection=mysql_connect("localhost","admin",""); 
if(!$connection) 
{ 
    die("Database Connection Failed: " . mysql_error()); 
} 
//Select a database to use 
$db=mysql_select_db('vss',$connection); 
if(!$db) 
{ 
    die("Database Selection Failed: " . mysql_error()); 
} 
$username=$_POST['username']; 
$password=$_POST['password']; 
// 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 
// 
$query="SELECT *FROM user where username='$username'AND password='$password'"; 
$result=mysql_query($query); 
$count=mysql_num_rows($result); 
// If result matched $username and $password,table row must be 1 row 
if($count==1){ 
// Register $username, $password and redirect to file "example.php" 
session_register("username"); 
session_register("password"); 
header("location:http://localhost/vss/main.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 
?> 

我剛添加:$userok=$count;$count==1再經過我加入我剛添加:$ userok = $計數;之後的行$計數== 1然後,我添加Call.php-><?php if($userok!=1); { header("location:localhost/vss/logindo.php";); } ?>我在加入include(call.php)但是,當我每次點擊按鈕時都會詢問登錄信息。如何才能登錄用戶,直到他按下「登出」。我在受限制的頁面頂部添加了include(call.php)。但是,當我每次點擊按鈕時,都會要求登錄。如何才能讓登錄的用戶登錄,直到他按下「登出」。

+0

當心SQL注入:http://php.net/manual/en/security.database.sql-injection.php – marto

+0

另一個提示:不要只使用計數來驗證用戶是否有效。使用:if($ username == mysql_result($ result,0,'username')) – armandomiani

回答

1

因爲您正在學習,所以我不會討論這個問題的安全性。你可以做的是: 1)行if($count==1)下面添加類似$userok=1; 和else部分添加$userok=0; 2)上述.PHP重命名爲類似的init.php, 3)對所有的頂部其他頁面做一些像「

include ('init.php'); 
    if (!($userok==1)) { 
     echo "Please do not call this directly, login first"; 
     exit; 
    } 

,你可以更換回聲‘請登錄’與header("Location: http://...")重定向到登錄頁面。

+0

感謝您的想法男人! –

+0

我剛剛添加了:$ userok = $ count;行$ count == 1之後我添加了Call.php - ><?php if($ userok!= 1); { \t \t header(「location:http://localhost/vss/logindo.php」); } ?>我在受限制頁面的頂部添加了include(call.php)。但是,當我每次點擊按鈕時都要求登錄。如何讓登錄的用戶登錄,直到他按下「登出」。 –

+0

您必須使用會話並將$ userok存儲在cookie中。驗證成功後,使用setcookie()設置cookie,然後在每個頁面上使用$ _COOKIES ['mycookie']變量檢查cookie。爲防止cookie在用戶使用該頁面時過期,請每次重新設置cookie。 – sivann

0

注marto 的重要的話,請確保您的SQL是安全的 我看你已經使用mysql_real_escape_string也看看準備好的語句

另外,因爲sesssion註冊從PHP 5.3.0開始是DEPRECATED。只需使用$ _SESSSION [「用戶名」] ,並且不需要在會話中輸入密碼

一旦在會話中有值,您可以在每個頁面的頂部檢查它們(使用include爲此)我建議不要在會議中使用任何特定數據,只考慮設置類似於會議記錄的變量var

eg

if(empty($_SESSION["username"]) 
{ 
    //redirect to login 
} 
else 
{ 

} 
0

典型的方法是檢查所有頁面是否設置了用戶名會話。例如,您可以使用front controller pattern輕鬆實現此功能。如果不是,則將用戶重定向到登錄頁面。

此外,我看到你沒有哈希用戶密碼。這不是很安全的做法。你應該看看how to deal with passwords in PHP。此外,註冊密碼會話是相當無用的,並且可能不安全。

而且@marto在評論中提到,您應該瞭解腳本中的SQL注入可能性。 prevent it並不難。

+0

感謝您的資源:-) –