我正在做的是使用WAMP服务器在我的本地系统中开发一个站点。它包含一个子目录中的moodle目录。网站有自己的用户帐户数据库,moodle有自己的。在一些建议我使用外部数据库身份验证工作正常但我想要的是当用户登录到网站时他应该立即登录moodle并且如果用户从网站注销他应该从moodle登出并且(如果可能的话,反之亦然)。
目前我要做的是 - 从网站登录用户并使用curl登录moodle并在外部设置cookie。如果我打印卷曲响应它显示moodle页面与登录用户但如果登录后我重定向到主页,我有一些链接到moodle像'MyCourse'。这些链接重定向到moodle登录页面,并显示消息“会话已超时。请记录...”。我的登录代码是..
$r=mysqli_query($link, "select * from userinfo where username = '$uname' and password=SHA('$password')");
if(mysqli_num_rows($r)>0)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://localhost/mysite/moodle/login/index.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=$uname&password=$password&rememberusername=1&Login");
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_AUTOREFERER, true );
$server_output = curl_exec ($ch);
$response = curl_getinfo( $ch );
curl_close ($ch);
//print_r($response);
preg_match_all('/^Set-Cookie:\s*([^\r\n]*)/mi', $server_output, $ms);
// print_r($result);
$cookies = array();
var_dump($ms);
foreach ($ms[1] as $m) {
list($name, $value) = explode('=', $m, 2);
list($namevalue) = explode(';', $value, 1);
setcookie($name, $namevalue, time()+3600*24, '/mysite/moodle', 'localhost');
}
//print_r($cookies);
//print_r( $server_output);
$row=mysqli_fetch_array($r, MYSQLI_ASSOC);
$_SESSION['logged_in']="yes";
$_SESSION['uid']=$row['id'];
//header('Location:home.php');
exit(0);
}else{
echo 'Invalid username/password';
}
请说明我做错了什么或者有更好的方法来做到这一点。
答案 0 :(得分:0)
我自己没看过,但也许看看将Joomla与Moodle整合的代码 - http://www.joomdle.com/en/ - 它声称在两个系统之间提供了一个无缝的标志 - http://www.joomdle.com/wiki/Single_Sign_On < / p>