Php Curl登录Cookie如何设置Cookie
我有两个站点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 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发送其他东西,
<?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?