2010-07-21 50 views
0

我有以下登錄腳本..將用戶重定向到登錄頁面

<?php 
$name = $_POST["name"]; 
$password = $_POST["password"]; 
$query = "SELECT * FROM users WHERE username = '$name' 
     AND password = '$password'"; 
$q=mysql_query($query) or die(mysql_error()); 
$result = mysql_query($query); 
if (mysql_fetch_row($result)) { 
    /* access granted */ 
    session_start(); 
    header("Cache-control: private"); 
    $_SESSION["access"] = "granted"; 
    header("Location: ./menu.php"); 
    } else 
    /* access denied &#8211; redirect back to login */ 
    header("Location: ./login.html"); 
    ?> 
    mysql_close(); 
    ?> 

但是我現在需要「菜單」重定向到登錄頁面沒有登錄用戶誰?防止直接訪問?

謝謝。

+1

只是FYI,你有兩個關閉「?>」標籤。 – eykanal 2010-07-21 15:50:34

+3

不要忘記逃避$ name和$ password;你真的應該醃製和散列你的密碼 – 2010-07-21 15:54:20

回答

4

in menu.php?

session_start(); 
if (!isset($_SESSION['access']) || $_SESSION['access'] != "granted") { 
    header("Location: ./login.html"); 
    exit(); 
} 
+2

不要忘記頂部的session_start() – 2010-07-21 15:53:29

+0

你忘記關閉isset()。 – 2010-07-22 08:06:10

+0

@Lex,謝謝。 – Fosco 2010-07-22 12:12:34

1

檢查menu.php頂部的值$_SESSION["access"]。另外,您錯過了致電session_start的電話。如果啓用了session.auto_start,可能不需要它,但明確調用它是個好習慣。

2

你必須把這樣的事情在menu.php的頂部:

<?php 
    session_start(); 
    if(!isset($_SESSION['access']) || $_SESSION['access'] != 'granted'){ 
     header("Location: ./login.html'); 
    } 
?> 

而且不要忘了淨化你的查詢輸入:

$name = mysql_real_escape_string(stripslashes($_POST["name"]));  
$password = mysql_real_escape_string(stripslashes($_POST["password"]));  

而且不要忘了請在每個使用腳本的開始處撥打session_start();$_SESSION

+0

只有在啓用了magic_quotes_gpc – Maerlyn 2010-07-21 16:15:32

+0

+1的情況下才需要'stripslashes',以獲得更完整的示例代碼。 – Fosco 2010-07-21 17:27:31

0

在菜單中選擇$_SESSION["access"]以查看用戶是否已登錄。順便提一下,您應該閱讀在SQL注入並重寫使用轉義的SQL查詢。

相關問題