2014-11-15 63 views
1

如果$ u和$ d匹配,會話將註冊。但是,如果我將$ d的字符串更改爲其他任何內容,則即使其他所有內容都通過,會話也不會註冊。我想要在用戶全名下注冊會話,並存儲在表用戶中。有沒有我沒有看到的東西?爲什麼我的會話只以這個唯一的會話變量開始?

<?php 
     include('conn.php'); 
     $u = $_POST['user']; 
     $p = md5($_POST['pass']); 
     $sql = "SELECT first_name, last_name, user, pass FROM users WHERE user = :user AND pass = :pass"; 
      $q = $conn->prepare($sql); 
      $q->bindParam(":user", $u); 
      $q->bindParam(":pass", $p); 
      $q->execute(); 
      $login = $q->fetch(); 
      $d = $login['user']; 
      if($login['user']){ 
       session_start(); 
       $_SESSION['login_user']=$d; 
       header('Location: index.php'); 

      } 
      else{ 
       header('Location: login.php'); 
      } 
?> 

編輯:我已編輯,以顯示我的意思更好的例子。如果我要將變量$ d更改爲$ login ['first_name'],那麼會話將不會註冊。即使這些信息在數據庫中是正確的,因爲它在成功時會在index.php上顯示名字。

$d = "user01"; 

,後來它被再次使用(一旦用戶名和密碼驗證)來:

$_SESSION['login_user']=$d; 

如果你想

+0

您可以包括其中_The會議不會register_的情況下?還有'var_dump(get_defined_vars());'的輸出。請注意不要在輸出中暴露敏感信息。 – cychoi

+0

它似乎在檢查數據庫中的驗證用戶名和密碼。哪一點不清楚? SQL非常簡單 - 它使用兩個參數 - 用戶名和密碼,它們使用'$ u'和'$ p'綁定。如果用戶被驗證,它將使用'$ _SESSION ['login_user'] = $ d;'將它存儲爲$ d =「user01」;''改變它。 – Fluffeh

+0

備註:是否正確使用md5散列來保護密碼?這是非常不安全的! – arkascha

回答

0

在代碼中,$d使用下列定義更改保存爲用戶全名的會話,將execcute語句更改爲query語句並返回數據庫中的行。然後將存有用戶名的列保存到會話中。

假設您更改執行的查詢 - 你可以使用類似:

$_SESSION['login_user']=$result['username']; 
+0

你能通過改變執行到查詢來澄清你的意思嗎? –