2014-11-15 49 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

你能通过改变执行到查询来澄清你的意思吗? –