从LDAP PHP获取用户名

时间:2016-05-25 20:26:58

标签: php web login ldap

我需要检索用户的名字来设置变量并使用它来更好地欢迎用户。

示例:使用luis.lino登录并设置$ name = "Luis Lino",其中通过LDAP从AD检索Luis Lino

我可以做到这一点"欢迎Luis Lino,我们希望你在这里享受你的时间"

我正在使用此代码:

$myusername = mysqli_real_escape_string($db,$_POST['username']) . "@domain.com";
        $mypassword = mysqli_real_escape_string($db,$_POST['password']); 
        $local = $_POST['filial'];
        $ldap = ldap_connect("ldap://domain.com");
        if ($bind = ldap_bind($ldap, $myusername, $mypassword)) 
        {
            $_SESSION['login_user'] = $myusername;
            $filter = "(&(sAMAccountName={$myusername}))";
            $ldap_dn = "dc=domain.com";
            $attr = array("givenname");
            $result = ldap_search($ldap, $ldap_dn, $filter, $attr) or exit("Unable to search LDAP server");
            $entries = ldap_get_entries($ldap, $result);
            $givenname = $entries[0]['givenname'][0];
            ldap_unbind($ldap);

            setcookie("name", $givenname, time() + (86400 * 30), "/");  

            setcookie("sessao", $local, time() + (86400 * 30), "/"); // 86400 = 1 dia
            header("location: welcome.php");
        } 

如果我只使用"登录"部分它完美地工作,但使用上面的代码我得到以下错误:

Warning: ldap_search(): Search: Client Loop in C:\wamp\www\OperPHP\index.php on line 20

我已经查了很多帖子,但没有解决我的问题,有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会尝试更改以下内容以连接到LDAP(只需要ldap_connect()下面的添加内容:

$ldap = ldap_connect("ldap://domain.com");
// Set to LDAPv3 protocol, disable referrals...
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

根据您所获得的错误,似乎无法尝试进行推介。此外,您的过滤器可以简化为$filter = "(sAMAccountName={$myusername})";。我也不确定这是否仅仅是因为您提供的示例,但通常您希望基本DN(在您的情况下为$ldap_dn)如下:$ldap_dn = "dc=domain,dc=com";