2012-04-02 31 views
1

同じであるがデータベースとデータが異なる2つのサイトがあります。 1つのサイトはwww.somesite.comで、もう1つは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/welcome.phpのリンク(sub.somesite.com/page2.php)をクリックすると、セッションはcookies.txtにあり、今はアクセスできないため、ログインページにリダイレクトされます。

どのようにセッションをすべてのページで引き続き使用できますか?

ありがとうございます。

答えて

0

これは、CURLがクライアント(ブラウザ)上にないサーバー上で実行するためです。あなたのサーバーにはユーザーのCookieがあるかもしれませんが、ユーザーはCookieを持っていません。

ブラウザのクッキーをsetcookieを使用して設定し、カールを忘れてしまいます。

+0

意味がありますが、$ _COOKIEの代わりに$ _SESSIONが使用されています。私は両方のURLを変更しなければならないと思いますか?最初にクッキーを設定し、2番目にクッキーを探してセッションに変換しますか? – fanfavorite

+0

さて、おそらくクライアントにセッションクッキー(通常はPHPSESSIDという名前)を渡して、リダイレクトすると、動作するようになります。 – Janhouse

+0

しかし、カールを忘れる。 session_set_cookie_params - http://php.net/manual/en/function.session-set-cookie-params.php – Janhouse

関連する問題