2011-06-26 20 views
1

PHPのLDAPログインに少し問題があります。最初のバインドは成功しましたが、資格情報が正しい場合でも2番目のバインドはありません。最初のバインドで使用した資格情報を使用して試してみましたが、最初のバインドでバインドできます。なぜ私は2回目を縛ることができないのですか?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

私は2番目のバインドを開始する前に最初のバインドを終了する必要があると思いましたが、明らかにこれは当てはまりません。自動的に検索後にバインドを終了しますか? – JosephD

+0

実際には、フォローアップ 'ldap_bind()' -callを使って再バインドするまで、または 'ldap_unbind()'で接続を終了するまで、ユーザとバインドされています。 LDAPにはユーザーをログアウトするという概念はありません。 –