2012-05-02 45 views
2

我需要從後臺運行的主腳本調用php腳本(我只是想調用並繼續而不等待響應) 但我需要訪問用戶會話在調用腳本在會話訪問的背景下運行php腳本

+0

爲什麼你沒有訪問該腳本中的用戶會話? –

+0

如果我通過使用wget調用system()調用腳本,我再也無法訪問特定的會話。 – mgalesic

回答

2

我的建議是不要使用默認的PHP會話,因爲它可能會非常棘手與後臺進程的工作....我會建議session_set_save_handlerhttp://www.php.net/manual/en/function.session-set-save-handler.php爲DB基地會議

這裏有一個很好的例子http://www.php.net/manual/en/function.session-set-save-handler.php#96305

+0

是的,我想我會在其他來源保存會話數據。 – mgalesic

+1

是的..你可以使用memcached或mongoDB ...更好的是 – Baba

+0

我使用了memcache,工作得很好。 謝謝 – mgalesic

-1
$_COOKIE['PHPSESSID'] = 'user_session_id';//Transfer parameters through $GLOBALS['argv'] 
session_start(); 
0

呼叫

string file_get_contents (string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]]) 

與$的maxlen = 0;

在文件名中,你可以給網址。在該URL中傳遞會話ID並在被調用的腳本中使用session_id()設置會話ID,然後調用session_start()。

確保調用腳本使用flush()和ob_flush()返回至少520個虛擬字符,以便調用腳本不會等待。

0

「會話」背後的要點是用戶客戶端可以以「無狀態」方式多次連接到服務器,但仍像「單一連接」一樣保持「狀態」。 「會話」數據在來自同一用戶客戶端的多個連接之間共享。

當您在服務器上產生後臺進程時,無論您是否使用PHP,「會話」不再有任何實際意義。用戶甚至可能會關閉他的客戶端機器,而不會影響服務器後臺進程。

考慮到這一點,使用其他地方建議的Cookies完全沒用。 Cookies保存在客戶端機器上,後臺進程將對其進行零訪問。

如果有後臺進程需要的客戶端信息,那麼調用進程需要以某種方式將它傳遞給後臺進程,無論是作爲某種參數還是某種數據文件。

我建議將「$ _SESSION」變量作爲Json編碼的數據字符串保存到臨時文件中。後臺進程可以讀取該文件,Json-將其解碼回數組,然後像使用$ _SESSION一樣使用它。然後刪除臨時文件。