2017-05-05 85 views
0

假設我有一個在啓動時寫入數據庫的網站。如果多個用戶同時登錄該網站,是否意味着它會嘗試寫入數據庫N次,其中N =用戶數量?有什麼辦法強制PHP只寫入數據庫,如果連接斷開連接(只有在所有其他用戶目前不在網站上時才寫入)?你認爲怎樣才能減少過度寫入或請求數據庫的可能性?PHP是單獨存儲會話還是共享內存?

+0

取決於服務器配置,但PHP的默認設置是將會話寫入硬盤上的文件而不是數據庫。 – rickdenhaan

+0

'有什麼辦法強制PHP只寫入數據庫,如果連接斷開連接(只有在所有其他用戶當前不在網站上時才寫入)?' - 我很難懷疑它。服務器如何跟蹤所有稍後需要插入的未決數據?假設有1M用戶數據需要稍後插入。就我而言,數據插入必須是立即的。 –

回答

0

首先,PHP默認爲會話文件。這些文件是在每個瀏覽器(又名用戶)的第一個session_start();調用中創建的。之後,同一個文件被用於子用戶session_start();爲用戶,直到他們關閉他們的瀏覽器。但是,當客戶端關閉瀏覽器時,會話文件不會從服務器清除,因爲它們具有由PHP定義的生存期。

如果您試圖確定是否所有會話都已過期(自所有會話過期後都沒有連接客戶端),則需要清除PHP垃圾收集器尚未找到的會話文件,然後掃描會話目錄文件,並且如果目錄中不存在會話文件,則可以假定該網站上沒有活動用戶。

請注意,如果您使用的是內存模塊,例如:php-redis來存儲會話,則需要檢查會話的路由需要從文件更改爲使用哪個處理程序檢查會話。