我在login.php中实现了AD身份验证,现在如果auth成功,我想将Users Given名称传递给另一个php页面,说app.php。
login.php
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password'])){
$adServer = "ldap://ad.my_domain.com";
$ldap = ldap_connect($adServer);
$username = $_POST['username'];
$password = $_POST['password'];
$ldaprdn = 'my_server' . "\\" . $username;
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
$bind = @ldap_bind($ldap, $ldaprdn, $password);
if ($bind) {
$filter="(sAMAccountName=$username)";
$result = ldap_search($ldap,"dc=my_domain,dc=COM",$filter);
ldap_sort($ldap,$result,"sn");
$info = ldap_get_entries($ldap, $result);
for ($i=0; $i<$info["count"]; $i++)
{
if($info['count'] > 1)
break;
$_SESSION['user']=$info[$i]["givenname"][0];
#echo $_SESSION['user'];
header("Location: app.php"); }
@ldap_close($ldap);
} else {
$msg = "Invalid email address / password";
echo $msg;
}
}else{
?>
<form action="#" method="POST">
<label for="username">Username: </label><input id="username" type="text" name="username" />
<label for="password">Password: </label><input id="password" type="password" name="password" />
<input type="submit" name="submit" value="Submit" />
</form>
<?php } ?>
这是 app.php
<?php
session_start();session_regenerate_id();
?>
<!DOCTYPE html>
<html>
<head>
<title>My App ::Home Page</title>
</head>
<body>
<?php
if (!isset($_SESSION['user'])) {
header("Location: login.php"); // If session is not set that redirect to Login Page
}
?>
// code for app
</body>
</html>
AD身份验证成功但不知何故 $ _ SESSION ['user'] 未传递给app.php。我试图在login.php中打印$ _SESSION ['user']的值,它显示了预期的结果。它总是从app.php重定向到login.php
我做错了什么?为什么isset($ _ SESSION ['user'])无法获取从登录
传递的值答案 0 :(得分:0)
我遇到了一些麻烦,但主要原因是它失败了,因为它无法启动会话。这是由<?php
之前的空白和 app.php之后的?>
引起的
我花了一段时间才弄清楚这个愚蠢而又严肃的事情。这是 good explanation
希望这有助于某人。