2013-03-31 62 views
2

我創建了一個用於gameserver管理的小型php站點,但它不會強制用戶登錄時未登錄。如果會話未處於活動狀態,我已添加了重定向,並在註銷時銷燬了會話。該網站在這裏http://zelware.co.uk/gameman將PHP重定向到登錄頁面,而不是強制登錄

它迫使你第一次登錄,但如果你從URL登錄login.php它可以讓你再次進入主區域。任何幫助將不勝感激,謝謝!

+2

如果沒有您的代碼或您嘗試過的代碼(特定代碼),我們幾乎無法爲您提供幫助。 – Think

+0

它可能會有助於調試,如果你有會話+重定向代碼 –

+0

然後檢查每個頁面上的會話,並顯示一些代碼,你試圖與之相關的,因爲你可能會搞砸了某個地方。 –

回答

0

你需要一個if語句

$_SESSION['loggedin']==TRUE; 

,以檢查是否有人登錄或沒有。 也考慮設置session_id()並重定向。

+0

這是如此糟糕,每個人都可以使用工具創建一個會話,所以只需登錄= true就是驗證登錄身份的最不安全的方式。 –

+0

不!這是一個誤解。我沒有說過上面的內容。 –

0

來驗證用戶身份,你需要一種簡單的機制:

  • 所有的頁面應該檢查這看起來對於一些會話值進行保護,並重定向到登錄頁面,如果這個值是不存在的。您可以將此檢查的代碼寫入單獨的函數/文件中,並在您網站的每個頁面中調用/包含它。

    is_user_logged_in(){ 
        return $_SESSION['logged_in']; // it is a boolean value, which should be set TRUE by the login function 
    } 
    
    //in every page of yours you should call this 
    if (!is_user_logged_in()){ 
        //redirect to you login page 
        header("Location: http://yoursitename.com/login_page.php"); 
    } 
    
  • 登錄頁面應該驗證用戶名/密碼,如果有效,創建你檢查在所有其他網頁會話值。

    if (valid_user($username, $password)){ 
        // this is the value you should check for in other pages 
        $_SESSION['logged_in'] = TRUE; 
        // you may also need to store other user-related info in the session 
        $_SESSION['user'] = array("id" => 1 , "username" => "test_user") // a data array from DB 
    } 
    
  • 註銷頁面應該銷燬您在其他頁面檢查的會話值。

    unset($_SESSION['logged_in']); 
    session_destroy(); 
    
0

您需要創建一種機制,如果用戶登錄驗證 在登錄時,系統將設置一個會話cookie - 一個隨機的,獨一無二的哈希值。哈希存儲爲一個cookie,以及數據庫中的用戶名,密碼,IP和登錄時間。

當用戶訪問該頁面時,可以調用一個看起來有點像這樣的函數:(不完全一樣,這不是很好,只是基本檢查,你還應該檢查IP是否匹配,以及會話是否有過期)

function verify_login() { 
// 
$hash = $_COOKIE['loginhash']; 
    if($hash != ''): 
     $hash = mysql_real_escape_string($hash); 
     $sql = "SELECT * FROM session WHERE hash = '$hash'"; 


    else: 
     header('Location: login.php'); 
    endif; 



    $res = mysql_query($sql) or die(mysql_error()); 

    if(mysql_num_rows($res) !=0): 
    while($row = mysql_fetch_assoc($res)) { 
            echo 'The user is logged in.'; 


    } 
    else: 
     header('Location: login.php'); 
    endif; 

     }