一尘不染

PHP Curl和cookie

php

我对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);
?>

这是认证过程:

  1. 用户输入用户名和密码: Connector.php?service=logon&user_name=user32&user_pass=123
  2. Connector.php?service=logosessionInfo 根据先前使用登录服务保存的cookie返回有关用户的信息。

问题在于此代码为每个用户将cookie保存在一个文件中,并且无法处理多个用户身份验证。


阅读 285

收藏
2020-05-26

共1个答案

一尘不染

上面描述的解决方案,即使具有唯一的CookieFile名称,也会在规模上引起很多问题。

我们必须使用此解决方案提供大量身份验证,并且由于文件读写操作过多,导致服务器宕机。

解决方案是使用Apache反向代理并完全忽略CURL请求。

2020-05-26