我正在使用LDAP进行用户登录。 下面的代码适用于验证用户名和密码。
<?php
$hostname="ldap://mydomain";
$ds=ldap_connect($hostname);
ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals');
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
ldap_set_option($ds, LDAP_OPT_SIZELIMIT, 33);
if ($ds)
{
$dn="DC=mydomain,DC=mydomain.net";
$username ="username";
$password ="xxxxxxx";
$ldaprdn = 'VCS' . "\\" . $username;
if (!($ldapc=ldap_bind($ds, $ldaprdn, $password))){
echo "<p>Error:" . ldap_error($ds) . "</p>";
echo "<p>Error number:" . ldap_errno($ds) . "</p>";
echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>";
die;
}
$filter = "(samaccountname=mani*)";
$attributes =array('mail');//array("name","telephonenumber","mail","samaccountname");
$result = ldap_search($ds, $dn, $filter,$attributes);
var_dump($result);
$info = ldap_get_entries($ds, $result);
print_r($info);
for ($i=0; $i < $info["count"]; $i++) {
echo $info[$i]["ou"][0];
}
} else {
echo "<h4>Unable to connect to LDAP server</h4>";
}
ldap_unbind($ds);
?>
但它不会返回记录的用户信息。 $ info [“count”] 的值始终为0.
我认为我误解了base_dn的值,并在ldap_search()中进行过滤。
任何建议都会很棒。
答案 0 :(得分:0)
最后我找到了解决问题的方法。
过滤无效。
所以我将过滤器更改为 $ filter =&#34;(samaccountname = *)&#34 ;;
现在我可以从我可以过滤更多的记录中检索所有记录。
答案 1 :(得分:0)
要从用户那里获取用户名和密码,我使用下面的代码。这对我很有帮助
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="AD Application"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
if($_SERVER['PHP_AUTH_PW'] == ""){
unset($_SESSION);
unset($_SERVER);
header('WWW-Authenticate: Basic realm="AD Application"');
header('HTTP/1.0 401 Unauthorized');
echo 'Invalid username and password';
exit;
}
$logval=explode("\\",$_SERVER['PHP_AUTH_USER']);
$logsize = sizeof($logval);
echo"<pre>";
print_r($_SERVER);
if($logsize == 1){
$loginname=$logval[0];
} else if($logsize == 2) {
$loginname=$logval[1];
} else {
$loginname = "";
}
}