2011-01-26 6 views
4

ファイルにクッキーを保存するのにCURLOPT_COOKIEJARを使用し、ファイルにクッキーを保存するためにCURLOPT_COOKIEFILEを使用しています。cURLのCURLOPT_COOKIEFILEオプションを使用して複数のリクエストを処理する

複数のユーザーが同じ時刻にスクリプトにアクセスしているときに何が起こるのでしょうか。クッキーファイルの内容が壊れませんか?また、複数のユーザーを同時に持つことができるように、Cookieファイルを管理するにはどうすればよいですか?

+0

の可能な複製をヘッダ[誰かが(PHP)を取り扱うCURLクッキーを説明することはできますか?](HTTP: //stackoverflow.com/questions/4105529/can-someone-explain-curl-cookie-handling-php) –

+0

答えが重複は正しいです、それは混乱より悪いです:) –

+2

@ペッカあなたが使用したいファイルへの完全なパスを提供することができます。私はその他の質問にコメントをつけます。 –

答えて

3

スクリプトの実行ごとに異なるファイルを指定する必要があります。そうしないと、ファイルの上書きなどの問題が発生します。

一意のファイルを生成する手段としてtempnam(下の例)を参照するか、単にuniqidなどを使用してファイルを作成することができます。

<?php 
    session_start(); 
    $cookieFilePath = $_SESSION['cookiefilepath'] 
         ? $_SESSION['cookiefilepath'] 
         : tempnam(sys_get_temp_dir(), session_id().'_cookie_'); 
    $_SESSION['cookiefilepath'] = $cookieFilePath; 
    ... 
    curl_setopt($curlSession, CURLOPT_COOKIEFILE, $cookieFilePath); 
    ... 
?> 

つまり、不要になったファイルは必ず削除する必要があります。 (スクリプトの存続期間内でない場合は、filemtimeなどを使用するcronを使用して整頓されたスクリプトを定期的に実行することができます)

ちなみに、の場合、を使用します。既存のCan someone explain CURL cookie handling (PHP)?の質問にもかかわらず、スクリプトと同じディレクトリにある必要はありません。

+2

'tempnam()'を使用してファイル名を作成する場合は、リクエストごとに異なります。その後のリクエストではクッキーを再利用することはできません。 – Kris

+0

@Kris良い点 - 私はmoの例を微調整します。ヘッドアップをありがとう。 :-) –

+0

+1:最初に 'session_start()'をしなければならないことは決してありませんでした。 – acme

1

複数の要求が同じファイルを上書きします(しかし、ファイルロックのために他のすべての要求の実行が遅くなる可能性もあります)。

クライアントのセッションごとに1つのCookieファイルが存在するように、session_id()をCookieファイル名に組み込むことができます。私はまた、sys_get_temp_dir()のようなものにファイルを格納することをお勧めします。以下のような

何か:

$cookieFile = sys_get_temp_dir().PATH_SEPARATOR.session_id().'-cookies.txt'; 

はそのため正常に動作する必要があります。

3

CURLOPT_COOKIEJARおよびは、Webブラウザのようにファイル内のCookieを処理するユーティリティです。 あなたのケースではお勧めできません。

しかし、httpヘッダーを使って直接再生して、Cookieを設定および取得することができます。クッキーを取得するためにあなたに

<?php 
curl_setopt($ch, CURLOPT_COOKIE, 'user=xxxxxxxx-xxxxxxxx'); 
?> 

のクッキーを設定するために、ちょうどあなたが迅速、クッキーヘッダーがhttp://curl.haxx.se/rfc/cookie_spec.html

使用例をどのように機能するかを理解するために、この文書を確認することができますSet-Cookie:

をSTARTSWITHヘッダを

を識別汚れていますが、間違いなく標準ではありませんです。これにより

<?php 
$header_blob = ' 
Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/ 
Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammo 
'; 

抽出クッキーヘッダ

$cookies = array(); 
if (preg_match_all('/Set-Cookie:\s*(?P<cookies>.+?);/i', $header_blob, $matches)) { 
    foreach ($matches['cookies'] as $cookie) { 
     $cookies[] = $cookie; 
    } 
    $cookies = array_unique($cookies); 
} 
var_dump($cookies); 

再送クッキー

$cookie_blob = implode('; ', $cookies); 
var_dump($cookie_blob); 
+0

私はcurlコマンドの次のセットでクッキーを使いたいと思います。そしてカールはファイルからの検索を許可します。だから私も識別したら、次のカールステートメントにどのように渡すのですか? –

+0

例を追加しました。 –

関連する問題