2013-02-17 14 views
0

目前我有一個非常基本的管理登錄系統。我可以通過我的admin_login.php頁面登錄,該頁面有一個來自我的login.php頁面的腳本,我可以從admin_control_panel.php更新記錄。我主要關心的是,任何人都可以直接在地址欄中輸入這些URL並繞過登錄過程。我現在的代碼並不是基於安全性的(我只是試圖讓我所有的基本功能和功能都能正常運行,然後我將專注於安全性)。如果未在管理面板上登錄,如何重定向用戶需要指導

我知道我必須使用會話來跟蹤用戶是否登錄,但我對將在哪裏實現這些會話感到有點困惑。

我的問題是:我在哪些頁面中包含代碼?哪些頁面包含這些會話?我在這些文件中包含什麼?

我想要的是能夠將用戶重定向到登陸頁面,如果他們還沒有登錄。

admin_login.php

<?php 

$dbhost = 'x'; 
$dbuser = 'x'; 
$dbpass = 'x'; 

$con = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('x'); 

?> 

<html> 

<head> 
<link rel="stylesheet" type="text/css" href="css/master.css"> 
</head> 

<body> 

<form method="post" action="login.php"> 

User:<input name="username" type="text"> 
Pass:<input name="password" type="password"> 

<input name="submit" type="submit" value="Submit"> 

</form> 

</body> 

</html> 

的login.php

<?php 

$dbhost = 'x'; 
$dbuser = 'x'; 
$dbpass = 'x'; 

$con = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('x', $con); 

$query = "SELECT username FROM members ". 
     "WHERE username=\"$_POST[username]\" ". 
     "AND password = \"$_POST[password]\""; 

$result = mysql_query($query, $con);   

mysql_data_seek($result, 0); 

if (mysql_num_rows($result) == 0) 
    header("Location: admin_login.php"); 
else 
    header("Location: admin_control_panel.php"); 
?> 

admin_control_panel.php

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Untitled 3</title> 
</head> 

<body> 

<?php 

include('./upload.html'); 

?> 

</body> 

</html> 

預先感謝您。

回答

1

最好的方法是用sessions。 在login.php中做這樣的事

if (mysql_num_rows($result) == 0) { 
    header("Location: admin_login.php"); 
} else { 
    header("Location: admin_control_panel.php"); 
    session_start(); 
    $_SESSION['user'] = $_POST['username']; 
} 

現在,在該文件的頂部admin_control_panel.php,只要加入這個PHP代碼,以檢查是否$ _SESSION [「用戶」]存在。

<?php 
if (! isset($_SESSION['user'])) { 
    header("Location: admin_login.php"); 
} 
?> 

基本上與此代碼,你會如果登錄正確創建用戶數據會話。如果不是,他會默認重定向到登錄頁面。 現在,當有人試圖訪問admin_control_panel頁面時,我們將首先檢查是否設置了會話。如果這是真的,他可以訪問該頁面,如果沒有,他將被重定向到登錄頁面。

有關會議更多閱讀: PHP.net Session manualw3schools.com Session manual

*注。要註銷,你必須銷燬會話,這樣做使用session_destroy();函數。

0

包括session_start();在腳本的頂部,然後你會做這樣的事情:

if (mysql_num_rows($result) == 0){ 
    header("Location: admin_login.php"); 
} else { 
    $_SESSION['permission'] = 'admin'; 
    header("Location: admin_control_panel.php"); 
} 

然後,您需要實現的功能檢查,如果管理員在登錄

function verifyAdmin() { 
    if(!isset($_SESSION['permission']) || $_SESSION['permission'] != 'admin'){ 
     header("Location: admin_login.php"); 
    } 
} 

現在,在每個管理頁面的頂部添加verifyAdmin();。請記住將session_start();添加到使用會話的任何頁面的頂部。

相關問題