2010-12-22 153 views
2

我想寫一個登錄腳本。登錄會話變量後,在主頁面上運行isLoggedIn函數。問題是,變量$ loggedIn總是返回true。有人可以幫忙嗎?爲什麼這個變量總是返回true?

function validateUser($user) 
{ 
    if(isset($user)){ 
    session_regenerate_id();//this is a security measure 
    $_SESSION['logged'] = 1; 
    $_SESSION['userid'] = $user;} 
} 
//Validates Login 
function isLoggedIn() 
{ 
    if($_SESSION['logged'] = 1) 
     return true; 
    return false; 
} 

$loggedIn = isLoggedIn(); 

if($loggedIn){ SHOW CONTENT FOR LOGGED IN USERS } 

else { show content for users not logged in } 

回答

10

您正在使用賦值運算符=代替條件運算==

它應該是:

if ($_SESSION['logged'] == 1) 
    return true; 

分配=的結果是右手邊的表達,這是1,這始終是在這種情況下,真實的。 :)

+0

謝謝,那沒有工作,但$ loggedIn總是打印值「1」是有原因嗎? – mcbeav 2010-12-22 06:16:02

+0

是的,因爲您將$ loggedIn的值設置爲`true`,這在PHP中與`1`相呼應。 – RabidFire 2010-12-22 06:19:06

4

這是因爲你設置$ _SESSION ['logged']與單個等於。使用雙等號,而不是:

function isLoggedIn() 
{ 
    if($_SESSION['logged'] == 1) 
     return true; 
    return false; 
} 
2

不是這個如果($ _ SESSION [ '記錄'] = 1) 這是正確的 - >如果($ _ SESSION [ '記錄'] == 1)

3

功能isLoggedIn() { 如果($ _ SESSION [ '記錄'] = 1)//分配值 '1' 至$ _SESSION [ '記錄']因此,在此,如果條件是檢查是否有任何值爲$ _SESSION ['logged'],對於所有的情況都是如此(有效/無效) 返回true; 返回false; }

$的loggedIn = isLoggedIn(); /那些$的loggedIn的值將是總是如此

變化如果($ _ SESSION [ '記錄'] = 1)到如果($ _ SESSION ['登錄'] == 1)