2011-06-26 181 views
1

我對我的PHP LDAP登錄有點麻煩。我的第一個綁定是成功的,但即使憑據是正確的,我的第二個綁定也不成立。我嘗試使用第一個第二個綁定的憑據來確保它能夠正常工作,並確信它可以在第一個綁定它時綁定它。爲什麼我不能第二次綁定?PHP LDAP登錄問題

<?php 
// Define $myusername and $mypassword 
$username=$_POST['username']; 
$password=$_POST['password']; 

// using ldap bind 
$ldaprdn = 'uid=MYUID,ou=special,ou=people,o=myo.com,dc=mydc,dc=com';  // ldap rdn or dn 
$ldappass = 'PASSWORD'; // associated password 

// connect to ldap server 
$ldapconn = ldap_connect("ldaps://MYLDAPSERVER", ###) 
    or die("Could not connect to LDAP server."); 

if ($ldapconn) 
{ 
    // binding to ldap server 
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); 

    // verify binding 
    if ($ldapbind) 
    { 
     $result = ldap_search($ldapconn, "ou=people,o=myo.com,dc=mydc,dc=com", "uid=$username"); 
     $info = ldap_get_entries($ldapconn, $result); 
     $userdn = $info[0]["dn"]; 
     $count = $info["count"]; 
     ldap_unbind($ldapconn); 

     if ($count == 1) 
     { 
      $ldapbinduser = ldap_bind($ldapconn, $userdn, $password); 
      if ($ldapbinduser) 
      { 
       echo "Sucess you made it all the way<br />"; 
      } 
      else 
      { 
       echo "Invalid Login Details, please try again(1001)"; 
      } 
     } 
     else 
     { 
      echo "Invalid Login Details, please try again(1002)"; 
     } 
    } 
    else 
    { 
     echo "LDAP bind failed(1000)"; 
    } 
} 

回答

3

雖然它的名稱可能暗示不同的東西,實際上ldap_unbind()殺死連接把手,後解除綁定連接不可用了。從您的代碼中刪除ldap_unbind()調用,一切都應按預期工作。

+0

我以爲我需要終止第一個綁定,然後開始第二個綁定,但顯然不是這種情況。自動搜索後是否終止綁定? – JosephD

+0

實際上,你必須與用戶綁定,直到你用後續的'ldap_bind()'調用重新綁定或直到你用'ldap_unbind()'終止連接。 LDAP沒有註銷用戶的概念。 –