2011-03-19 164 views
2

我在使用PHP會話變量麻煩:我嘗試設置變量,他們甚至不能在同一個文件中讀取,更別說其他文件。PHP會話變量沒有被設置

很抱歉,如果這個問題已經被問過,但我無法找到任何東西,不說「請確保您在文件的開頭有session_start()。」

行1,2,文件的& 3:

<?php 
    ini_set('session.save_path','/home/[username]/session_data'); // Just in case, points to a correct directory 
    session_start(); 

後來,用戶名驗證和登錄後,變量被設置,並且代碼試圖echo出來:

$_SESSION['login'] == "true"; 
$_SESSION['username'] == $username; 
$_SESSION['password'] == sha1($password); 
//header("Location: [admin page hidden]"); // Code would normally redirect to admin page (commented out for debugging), and exit 
//exit; 
echo "Username: ".$username."<br />"; // The following 4 lines try to print out the data 
echo "Password: ".$password."<br />"; 
echo "Secure Password: ".sha1($password)."<br />"; 
echo "Session Username: ".$_SESSION['username']."<br />"; 

輸出是:

Username: root 
Password: [correct password] 
Secure Password: [correct sha1 version of password] 
Session Username: 

安全密碼(sha1,檢查的內容)與數據庫文件中的內容匹配,我查了一下。會話變量沒有任何內容,即使它以前創建了7行。我將保存路徑指向的目錄只有會話的空白文件。

有沒有人對如何進行任何線索,爲什麼這不工作,或建議?任何有用的迴應表示讚賞。

回答

6

以下行是問題的原因:

$_SESSION['login'] == "true"; 
$_SESSION['username'] == $username; 
$_SESSION['password'] == sha1($password); 

這些線路幾乎做什麼:他們比較==與後什麼是之前什麼;並且對比較的結果不做任何事情。


分配值的變量,你應該使用ONE =,而不是兩個:

$_SESSION['login'] = "true"; 
$_SESSION['username'] = $username; 
$_SESSION['password'] = sha1($password); 

那些三線分配什麼是對=的在其什麼是正確的剩下。


在PHP:

+0

權,當然。我在PHP中編寫了大約一年,這是我第一次搞砸了......當我編寫代碼時,一定非常累。 – 2011-03-19 21:59:16

+0

乎乎的^^有時,有其他人看看你的代碼可以幫助:-) *(這是一種錯誤,我們都做的......再也看不到它時,它是在我們自己的代碼^^)* – 2011-03-19 22:00:36

+0

沒錯。感謝你的回答。我還有一個問題,如果你也許能回答這個問題(會這樣,而我創造了另一個問題?):有一種簡單的方法來檢查設置什麼變量,通過瀏覽器,還是我最好嘗試打印了大部分的變量? – 2011-03-19 22:23:33

0

什麼是Web服務器的日誌說?這一定是一些配股問題。

2

您正在使用==,這是一個平等的測試。請使用=