2015-12-22 21 views
-2

我有這個代碼在開發機器上可以正常工作,但是當移植到生產環境時,用戶將會得到警告錯誤的細節,儘管是正確的。這是一個會話問題?

我的猜測是這是PHP的會話問題。但是,我將會話文件保存到服務器上的/ tmp。我是否錯過了導致此問題的明顯因素?

代碼在下面引用。

session_start(); 
include_once 'dbconnect.php'; 

if(isset($_SESSION['user'])!="") 
    { 
     header("Location: home.php"); 
    } 
if(isset($_POST['btn-login'])) 
    { 
     $email = mysql_real_escape_string($_POST['email']); 
     $upass = mysql_real_escape_string($_POST['pass']); 
     $res=mysql_query("SELECT * FROM `USERS` WHERE `EMAIL` = '$email'"); 
     $row=mysql_fetch_array($res); 
     if($row['PASSWORD']==md5($upass)) 
      { 
       $_SESSION['user'] = $row['ID']; 
       header("Location: home.php"); 
      } 
     else 
      { 
       ?> 
       <script>alert('wrong details');</script> 
       <?php 
      } 

    } 
+1

檢查電子郵件和密碼的代碼不使用會話變量。爲什麼會是一個會話問題? – Barmar

+1

這是無效的語法'if(isset($ _ SESSION ['user'])!=「」)' - 你需要2個條件。檢查它是否設置,如果不等於。 –

+2

爲什麼我覺得我在最後一天多次看到相同的問題/代碼?編輯:http://stackoverflow.com/q/32094350/我認爲是這樣,其他幾個人。 –

回答

1

變化

if (isset($_SESSION['user']) != "") { 
    header("Location: home.php"); 
} 

if (!empty($_SESSION['user'])) { 
    header("Location: home.php"); 
} 

更多信息由karim79看看這個帖子https://stackoverflow.com/a/1519849/1592783。或者如果你想知道關於empty檢查出http://php.net/empty

+0

許多人喜歡它,當解釋給出。這樣,每個人都在學習。你知道發生了什麼,我知道和其他人,但許多新的條件語句和PHP不會。 *爲未來的答案提供思考*。提示:它吸引了更多的選票(+)。 ;-) –

1

試試這個。我做了以下修改:

  • 修復的$_SESSION['user']isset()測試。您不應該將其與""進行比較。也許你真正想要的是if(!empty($_SESSION['user'])

  • 使用elseif,以便它只在會話變量未設置時檢查電子郵件和密碼。

session_start(); 
include_once 'dbconnect.php'; 

if(isset($_SESSION['user'])) 
    { 
     header("Location: home.php"); 
    } 
elseif(isset($_POST['btn-login'])) 
    { 
     $email = mysql_real_escape_string($_POST['email']); 
     $upass = mysql_real_escape_string($_POST['pass']); 
     $res=mysql_query("SELECT * FROM `USERS` WHERE `EMAIL` = '$email'"); 
     $row=mysql_fetch_array($res); 
     if($row['PASSWORD']==md5($upass)) 
      { 
       $_SESSION['user'] = $row['ID']; 
       header("Location: home.php"); 
      } 
     else 
      { 
       ?> 
       <script>alert('wrong details');</script> 
       <?php 
      } 

    } 
+0

仍然是同樣的問題。不完全確定它爲什麼行事,因爲它沒有通過md5檢查。 –

+0

不要在密碼上使用'mysql_real_escape_string',因爲您沒有將其替換爲查詢。 – Barmar

+0

把'var_dump($ row ['PASSWORD'],md5($ upass));'放到'else'子句中,這樣你就可以看到密碼是什麼。 – Barmar

1

isset將只返回true或false。

if(isset($_SESSION['user'])!="") 

嘗試將其更改爲

if(isset($_SESSION['user'])) 

或比較值OS的$ _SESSION [ '用戶']有:

if($_SESSION['user'] == "") 
0

所以我終於固定它。從Windows遷移到Linux MySQL表名變得區分大小寫。不知道。

+1

是的,* NIX和Windows是兩種不同的動物,*無處不在*。請牢記文件夾/文件名的命名規則;-) –