我的问题是:我有一个在线服务,托管我客户的目录
此服务需要身份验证,但我只有一个用户名/密码
相反,我的客户希望使用自己的用户/密码和访问统计信息单独管理每个用户。所以我所做的就是建立自己的账户管理,到目前为止一直很好
我现在需要做的是添加一个登录表单,用户应该使用自己的凭据填写;一旦发送,脚本应继续进行身份验证,如果一切正常,则增加访问次数,通过POST发送远程系统的登录数据,并将浏览器重定向到响应页面,这与普通表单的方式完全相同。登记/>
我尝试以这种方式使用curl
:
if (authenticate($_POST['usr'],$_POST['pwd'])) {
$url = "http://www.foo.com/login.php";
$postdata = http_build_query(array('username'=>"foo",'password'=>"bar"));
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($curl);
curl_close($curl);
}
但我最终将目标网页的数据加载到我自己的页面中,而不是重定向到网站。
我该怎么办?
附:如果可能的话,我会避免诉诸通过JS提交的隐藏表格
谢谢!
答案 0 :(得分:2)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
从手册:
TRUE以将返回值作为字符串返回 curl_exec()而不是直接输出。
答案 1 :(得分:2)
我认为你没有看到你想要做的事情的全貌。基本上,重定向对您没有帮助,因为身份验证不是基于URL的,而是基于cookie或会话。换句话说,您无法对自己进行身份验证(当您使用隐藏凭据模拟该网站上的表单提交时会发生这种情况)并让您的访问者为自己获得身份验证。重定向不会帮助你。即使你重定向他,他也没有经过身份验证。你的服务器是,因为它提交了表单,而不是用户本人。
我没有得到的是您可以使用隐藏凭据对用户进行身份验证,然后让他完全访问统计信息,为什么不给他访问权限呢?您正在向他提供对所有内容的完全访问权限,但是不要给他登录名和密码吗?
另一方面,不能进行POST重定向,因此您无法使用伪造的POST数据重定向表单提交。重定向时丢失所有POST数据。
作为一个丑陋的解决方法,我会建议以下内容:您可以像现在一样对自己进行身份验证,然后让用户浏览您网站上的统计信息,类似于代理服务器。然后,您可以将页面上的所有链接更改为yoursite.com/viewstats/?page=URL
,其中URL
是用户想要查看的统计网站的页面。您抓住该页面并将其显示给用户。您需要更改css / js文件的相对路径以保持其设计,并且您还需要更改所有内部网站链接,例如此"/viewstats/?page=" . urlencode($old_url)
,以便它们指向类似代理的门。