Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Curl登录Cookie如何设置Cookie_Php_Cookies_Curl_Login_Setcookie - Fatal编程技术网

Php Curl登录Cookie如何设置Cookie

Php Curl登录Cookie如何设置Cookie,php,cookies,curl,login,setcookie,Php,Cookies,Curl,Login,Setcookie,我有两个站点A和B我希望能够有一个经过验证的用户从站点A登录到站点B 站点A-使用php 站点B-使用Zend框架 我想有一个iframe在站点a到站点B的私有部分,或者重定向到站点B 当我在站点a上的表单上发布html文章时,我会被重定向并登录到“一切正常”中,我希望用php从服务器端更安全地完成这项工作。当我使用php curl发布时,用户没有登录到iframe内部,我尝试了重定向,但用户没有登录到站点B 我不知道为什么html表单有效而php curl无效?我应该使用curl发送其他东西,

我有两个站点A和B我希望能够有一个经过验证的用户从站点A登录到站点B

站点A-使用php

站点B-使用Zend框架

我想有一个iframe在站点a到站点B的私有部分,或者重定向到站点B 当我在站点a上的表单上发布html文章时,我会被重定向并登录到“一切正常”中,我希望用php从服务器端更安全地完成这项工作。当我使用php curl发布时,用户没有登录到iframe内部,我尝试了重定向,但用户没有登录到站点B

我不知道为什么html表单有效而php curl无效?我应该使用curl发送其他东西,还是Zend有问题

-----好的,在更多的谷歌搜索之后,我把问题缩小到了饼干,我相信我必须设置它们,但我不知道如何设置?这是正确的吗?如何在php中设置它们?还是将cookie设置为浏览器并转发到站点B的标题传递给浏览器?如果是这样,我该怎么做

这是到目前为止我的代码

<?php
$data = array(
 'useremail' => 'someemail',
 'password' => 'somepassword'
 );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://siteb.com/account/login");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);

$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
?>    

<html>
 <body>
 <iframe src="http://SiteB.com/account/login" width="950" height="700"></iframe>

 <form action="http://SiteB.com/account/login" method="post">
 email: <input type="text" name="useremail" value="useremail" /><br />
 password: <input type="text" name="password" value="somepassword" /><br />
 <input type="submit" value="Submit" />
 </form>
</body>
</html>

电子邮件:
密码:

感谢您的时间和帮助。

您是否创建了cookies.txt并允许web服务器的用户对其进行写入

将需要启动会话(或写入cookie)

cURL将处理其余部分。

“当我使用php cURL发布帖子时,用户没有登录到iframe内部,我尝试了重定向,但用户没有登录到站点B。”

我的回答:把Php Curl想象成一个broswer。您正在以不同浏览器的形式执行脚本的浏览器。要使iframe身份验证工作,需要在浏览器中设置cookie。当您从PHP脚本进行身份验证时,cookie在PHP curl broswer上设置。这两个兄弟不共享饼干。我认为你不能让用户像这样登录

您使用的是Windows服务器还是Linux服务器

我相信我必须设置它们,但我不知道如何设置?这是正确的吗? 通过查看curl选项来使用cookies,您的做法是正确的

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
顺便说一句,你能试试下面的代码并检查cookies文件夹中是否生成了cookies%randNum%.txt吗?顺便说一句,在执行之前,在与脚本相同的文件夹中创建一个cookies文件夹。只是为了确保您将所有cookie保存在一个文件夹中,而不是分散在脚本文件中

    <?
$mypath = getcwd();
            $mypath = preg_replace('/\\\\/', '/', $mypath);
            $rand = rand(1, 15000);
            $cookie_file_path = "$mypath/cookies/cookie$rand.txt";
    $data = array(
     'useremail' => 'someemail',
     'password' => 'somepassword'
     );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://siteb.com/account/login");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);   // Cookie management.
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);

    $output = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
?>


现在我正在使用wamp,我试着运行$mypath=getcwd()$mypath=preg\u replace(“/\/”、“/”、$mypath)$兰特=兰特(15000)$cookie_file_path=“$mypath/cookies/cookie$rand.txt”;但是当我从firefox->web developer tools->Cookies->view cookie information上的siteB登录时,找不到我在firefox和chromeOn My siteB上尝试的文件,我看到了我的cookie,但当我打开cookie.sqlite时,我没有看到cookie。问题可能是我的siteB没有正确创建cookie吗?当我从firefox上的siteB->web developer tools->Cookies->查看cookie信息我看到了我的cookie,但当我打开cookie.sqlite时,我没有看到cookie,问题可能是我的siteB没有正确创建cookie?