当前位置: 首页 > 面试题库 >

PHP Curl和cookie

牛枫
2023-03-14
问题内容

我对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保存在一个文件中,并且无法处理多个用户身份验证。


问题答案:

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

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

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



 类似资料:
  • Sessions 和 cookies 允许数据在多次请求中保持, 在纯 PHP 中,可以分别使用全局变量 $_SESSION 和 $_COOKIE 来访问,Yii 将 session 和 cookie 封装成对象并增加一些功能, 可通过面向对象方式访问它们。 Sessions 和 请求 和 响应类似, 默认可通过为 yii\web\Session 实例的 session 应用组件 来访问 sess

  • session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在浏览需要认证的服务页面以及页面统计中却相当关键。我们先来了解一下session和cookie怎么来的?考虑这样一个问题: 如何抓取一个访问受限的网页?如新浪微博好友的主页,个人微博页面等。 显然,通过浏览器,我们可以手动输入用户名和密码来访问页面,而所谓的“抓取”,其实就是使用程序来模拟完成同样的工作,

  • 问题内容: 我一直在尝试使用curl登录barnesandnoble.com移动网站,到目前为止还没有运气。我返回的页面没有任何错误,它再次将我的电子邮件默认设置为登录页面的电子邮件输入表单框(使用print $ result返回的表单)。 通过更改LOGINURL指向eBay的登录名,相同的代码实际上可以使我正确地进入ebay。 唯一的区别是barnesandnobles是https://,而e

  • 问题内容: 我在Android中的HttpClient遇到问题:通过使用以下代码,我想使用通过Web视图登录之前已设置的cookie。因此,登录数据应该存在并且确实存在,我对此进行了测试。但是,当我在httppost或httpget中使用cookie时,它不使用登录数据。但是这些cookie实际上应该足以接收需要登录的页面,不是吗?我不确定我是否需要以特殊方式将cookie发送到服务器,或者是否足

  • Cookie Session 储存位置 客户端 服务器端 目的 跟踪会话,也可以保存用户偏好设置或者保存用户名密码等 跟踪会话 安全性 不安全 安全 session技术是要使用到cookie的,之所以出现session技术,主要是为了安全。

  • 问题内容: 我已经成功使用httpclient成功登录到站点,并打印出启用该登录的cookie。但是,我现在陷入困境,因为我想使用.setPage(url)函数在JEditorPane中显示后续页面。但是,当我这样做并使用Wireshark分析我的GET请求时,我看到用户代理不是我的httpclient而是以下内容: 用户代理:Java / 1.6.0_17 GET请求(在侧面jeditorpan