我对PHP Curl和cookie身份验证有一些问题。
我有一个 Connector.php 文件,该文件对另一台服务器上的用户进行身份验证并返回当前用户的cookie。
问题是我想用curl认证成千上万的用户,但是一次只能认证一个用户并保存COOKIES。
Connector.php的代码是这样的:
<?php if(!count($_REQUEST)) { die("No Access!"); } //Core Url For Services define ('ServiceCore', 'http://example.com/core/'); //Which Internal Service Should Be Called $path = $_GET['service']; //Service To Be Queried $url = ServiceCore.$path; //Open the Curl session $session = curl_init($url); // If it's a GET, put the GET data in the body if ($_GET['service']) { //Iterate Over GET Vars $postvars = ''; foreach($_GET as $key=>$val) { if($key!='service') { $postvars.="$key=$val&"; } } curl_setopt ($session, CURLOPT_POST, true); curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars); } //Create And Save Cookies $tmpfname = dirname(__FILE__).'/cookie.txt'; curl_setopt($session, CURLOPT_COOKIEJAR, $tmpfname); curl_setopt($session, CURLOPT_COOKIEFILE, $tmpfname); curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); curl_setopt($session, CURLOPT_FOLLOWLOCATION, true); // EXECUTE $json = curl_exec($session); echo $json; curl_close($session); ?>
这是认证过程:
Connector.php?service=logon&user_name=user32&user_pass=123
Connector.php?service=logosessionInfo
问题在于此代码为每个用户将cookie保存在一个文件中,并且无法处理多个用户身份验证。
上面描述的解决方案,即使具有唯一的CookieFile名称,也会在规模上引起很多问题。
我们必须使用此解决方案提供大量身份验证,并且由于文件读写操作过多,导致服务器宕机。
解决方案是使用Apache反向代理并完全忽略CURL请求。