2011-07-28 169 views
4

在確保我的工作我的站點的管理員區的嘗試由包含限制直接的頁面訪問

if (isset($_POST['password']) && isset($_POST['userName'])) { 
     if($_POST['password']==$pass && $_POST['userName']==$username) 
     { 
      header('Location: admin.php') ; 
     } 

這重定向到一個文件在同一文件夾名爲admin.php的一個的index.php 。問題是我可以訪問這個文件,如果我寫localhost/folder/admin.php。請告訴我如何限制直接訪問此頁面。訪問它的唯一方法應該是在用戶名和密碼後從index.php中獲取。

回答

6

設置會話變量,並檢查它everytimes有人訪問admin.php的

<?php 
    if (isset($_POST['password']) && isset($_POST['userName'])) { 
     if ($_POST['password'] == $pass && $_POST['userName'] == $username) { 
      if (!session_id()) 
       session_start(); 
      $_SESSION['logon'] = true; 

      header('Location: admin.php'); 
      die(); 
     } 
?> 

//admin.php 

if (!session_id()) session_start(); 
if (!$_SESSION['logon']){ 
    header("Location:index.php"); 
    die(); 
} 
4

設置表示用戶已成功登錄的會話值,在每個需要保護的頁面上檢查該值,如果未設置該值,則重定向至登錄。

7

你應該看看PHP會議。您可以在該重定向文件中設置會話變量「isLogged」,然後在admin.php中檢查該會話變量是否已註冊,如果沒有重定向到登錄頁面!

session_start(); 
if (isset($_POST['password']) && isset($_POST['userName'])) { 
     if($_POST['password']==$pass && $_POST['userName']==$username) 
     { 
      header('Location: admin.php') ; 
      $_SESSION['isLogged'] = true; 
     } 

admin.php的

session_start(); 
if(!$_SESSION['isLogged']) { 
    header("location:login.php"); 
    die(); 
} 

注:在session_start();必須在$ _SESSION全局可用之前調用。