2012-04-02 167 views
1

我有2个相同但数据库和数据不同的站点。一个网站是www.somesite.com,另一个是sub.somesite.com。我所做的是,如果有人登录到www.somesite.com并且登录详细信息与www.somesite.com不匹配,但他们确实匹配sub.somesite.com,然后使用cURL提交信息并将其登录。我有卷曲伟大工作:cURL登录在重定向时丢失会话变量

foreach($_POST as $key=>$p) { 
    if ($post != "") { 
    $post .= "&"; 
    } 
    $post .= $key."=".$p; 
} 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://sub.somesite.com"); 
curl_setopt($ch, CURLOPT_POST, count($_POST)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
$cArray = curl_getinfo($ch); 
$newURL = $cArray[url]; 
echo str_replace('</head>','<base href="'.$newURL.'" /></head>',$result); 
curl_close($ch); 

这样做是收集后的变量,并提交给其他网站,并增加了一个基本的URL,这样的路径是正确的。

我遇到的问题是之后的任何其他页面。所以说我在somesite.com上提交数据。即使它是去sub.somesite.com/welcome.php,它会显示在地址栏somesite.com,并且信息存储在cookies.txt中。现在,当我点击sub.somesite.com/page.php上的链接(sub.somesite.com/page2.php)时,它会重定向到登录页面,因为会话位于cookies.txt中,现在无法访问。

如何让会话继续在所有页面上工作?

在此先感谢。

回答

0

这是因为CURL在服务器上而不是客户端(浏览器)上执行它。您的服务器可能拥有用户cookie,但用户不会。

您想使用setcookie来设置浏览器的Cookie,并忘记Curl。

+0

有道理,但它们使用$ _SESSION而不是$ _COOKIE。我想我将不得不改变这两个网址?第一个设置cookie,第二个查找cookie并转换为会话? – fanfavorite 2012-04-02 01:37:37

+0

好吧,也许将会话cookie(通常名为PHPSESSID)传递给客户端,然后重定向,将使其工作。 – Janhouse 2012-04-02 01:45:22

+0

但忘了卷曲。您可以使用session_set_cookie_params来设置该域的会话cookie - http://php.net/manual/en/function.session-set-cookie-params.php – Janhouse 2012-04-02 01:45:56