2011-07-14 131 views
1

我有一個登錄頁面和「會員區」頁面,登錄代碼是在這裏:PHP會話問題

的login.php

if ($account->is_logged_in()) 
{ 
    $route->to(ACCOUNT_URL); 
} 

elseif (isset($_POST['username'])) 
{ 
    if ($account->authenticates()) 
    { 
     if ($account->log_in()) $route->to(ACCOUNT_URL); 
    } 
    else 
    { 
     $flash->set('error', 'The credentials you provided are incorrect.'); 
    } 
} 

的功能(在不同的文件)

public function log_in() 
{ 
    session_unset(); 
    session_destroy(); 

    if(session_start()) 
    { 
     $_SESSION['logged_in'] = true; 
     $_SESSION['username'] = $_POST['username']; 
    } 
} 

public function authenticates() 
{ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    if (ctype_alnum($username) && ctype_alnum($password)) 
    { 
     $username = mysql_real_escape_string(filter_var($username, FILTER_SANITIZE_STRING)); 
     $password = $this->encrypt(mysql_real_escape_string(filter_var($password, FILTER_SANITIZE_STRING))); 

     $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; 

     $result = mysql_query($sql); 

     if (mysql_num_rows($result) == 1) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    else 
    { 
     return false; 
    } 
} 

然後我的會員區頁面:

if ($account->is_logged_in()) 
{ 
    echo 'logged in'; 
} 
elseif (!$account->is_logged_in()) 
{ 
    echo 'not logged in'; 
    echo session_id(); 
    print_r($_SESSION['logged_in']); 
} 

login.php重定向我(意味着它對我的帳戶進行身份驗證),但是當我到達members.php時,它會迴應「未登錄」,這就是全部。

+1

if(session_Start()) – genesis

回答

1

你在其中使用會話的所有腳本的最開始有session_start()任何頁面調用session_start()

4

你需要在members.php頂部(這需要訪問$_SESSION

// Must initiate the session to test if logged in. 
session_start(); 
if ($account->is_logged_in()) 
{ 
    echo 'logged in'; 
} 
elseif (!$account->is_logged_in()) 
{ 
    echo 'not logged in'; 
    echo session_id(); 
    print_r($_SESSION['logged_in']); 
} 
+0

謝謝,我多麼傻xD後嘗試把else語句放到你的log_in函數中 – Zen