我正在構建一個服務器端工作人員管理器腳本,它保存$ _SESSION中的「工作中的工作」數據,並且每次調用自己的下一個工作都要完成。這讓我可以控制,因爲我可以隨時停下並重新繼續。這很好。我遇到的問題是能夠在同一瀏覽器中運行一些這些經理,因爲他們共享$ _SESSION。所以我試圖創建一個二維$ _SESSION數組,根據我在http請求中指定的sessionId保存不同的數據。我想這樣做是爲了從同一瀏覽器運行多個抓取程序,一次只執行一項任務,並在其變量「$_SESSION[$sessionId]
」中保留其餘任務的列表。所以我爲每個請求添加了一個sessionId
,然後每個腳本都使用它。如果沒有sessionId
,它會很好用,並且不能像我期望的那樣工作。我很難理解爲什麼。這是一個示例代碼來演示我的問題:
session_start();
$sessionId = $_REQUEST['sessionId'];
if ($_REQUEST['currId'] == 0) {
unset ($_SESSION[$sessionId]);
$_SESSION[$sessionId]['log'] = "starting log for session " . $s;
}
if ($_REQUEST['currId'] < $_REQUEST['limit']) {
$_SESSION[$sessionId]['log'] .= " adding ";
// call with next currId
echo '<META HTTP-EQUIV="Refresh" CONTENT="1;URL=' . "'test3.php?limit=" . $_REQUEST['limit'] . "&currId=" . ($_REQUEST['currId']+1) . "&sessionId=" . $sessionId . "'" . '">';
}
// reached limit
else {
echo $_SESSION[$sessionId]['log'];
};
我第一次調用調用test3.php?limit=5&currId=0&sessionId=0
比期待與currId = 1,2,3,4,5代碼重新調用自身。好的。但是$ _SESSION並不保留,因爲我預計它會是 。當我刪除sessionId
用法時,它確實起作用。但這種方式,我只能同時調用爬行,除非我打開其他瀏覽器...
感謝
我不知道你在這裏試圖完成什麼。如果'test3.php'以某種方式負責啓動服務器端工作者,那麼讓它立即啓動所有這些工作。至於讓瀏覽器窗口做一些工作,很明顯,如果你繼續重定向它,那麼無論如何它一次只能做一件事。 – Jon
由於服務器端工作人員數量巨大,我希望一次只能做一名工作人員。這樣我就可以隨時停止它,而不是繼續。這就是爲什麼我要在$ _SESSION中保存「需要完成哪些工作」的數據。現在這個工作很好,我只想添加一個選項來運行幾個這樣的共享相同$ _SESSION的工作經理。 – Noam