2011-07-05 110 views
3

如何爲每個客戶端/ PC運行腳本有多個Cookie?捲曲:多個餅乾

如果ComputerA運行腳本,則會創建cookies.txt,並且ComputerB運行相同的腳本,然後cookie.txt將被覆蓋,這是不好的。

例子:

curl_setopt($ch,CURLOPT_COOKIEFILE,"cookie.txt"); 
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookie.txt"); 

回答

2

如果他們是獨立的電腦,那麼它是單獨的文件系統,而且每次都會有自己的cookie文件。

但是,如果你在共享存儲上,然後使用動態文件名,也許

'cookie-' . $_SERVER['SERVER_NAME'] . '.txt' 

代替,which'd給你

cookie-ComputerA.txt cookie-ComputerB.txt etc... 
+0

我不認爲這會工作?腳本將在同一臺服務器上,但請求來自多臺計算機。 –

+0

啊。你說「computerA運行腳本,而computerB運行腳本」。兩臺獨立的電腦。無論如何,這仍然不是問題。 cookie.txt文件將採用Netscape Cookie文件格式,該文件可以跟蹤哪個主機來自Cookie。除非您並行運行腳本多次,否則一個cookie不會覆蓋另一個腳本。 –

+0

Marc,好點,但我喜歡在MS-DOS而不是瀏覽器上運行腳本。我如何在MS-DOS上運行腳本(連接到外部網絡)?在本地機器(開發),我通常這樣做:'C:\ wamp \ bin \ php \ php5.3.0 \ php.exe index.php'這將執行代碼..現在我怎麼能在多臺計算機上運行此LAMP安裝)? –

0

你可以散列IP的請求到來從並將其添加到文件名。這將工作,除非兩臺計算機具有相同的公共IP。

0

您可以使用唯一標識符來唯一標識用戶。用戶ID,會話ID或IP地址可能是一個不錯的選擇:

$user_id = get_user_id_from_somewhere(); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie-".$user_id.".txt"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie-".$user_id.".txt"); 
+0

好主意,也許蘭特(12345,23423422324)? –

+0

@ user791022由於PHP的隨機生成器不保證衝突,因此不能使用隨機數作爲唯一標識符。如果您在應用程序上使用用戶身份驗證,那麼您幾乎肯定會使用用戶標識來達到此目的。否則,我建議使用IP地址或IP地址散列(例如'md5($ _ SERVER ['REMOTE_ADDR']')。 –