2011-09-21 54 views
0

我使用$ _SESSION進行用戶身份驗證,但我正在考慮在會話中存儲其他變量。但是,我不知道多少會話可能會使用服務器上的資源。我的意思是每個頁面都有session_start()是有害的,因爲即使不需要會話也會啓動會話?session_start()的資源使用情況()

在每次訪問時開始會話是好是壞,還是中性?

回答

1

是的,session_start()消耗資源。但是,除非您的網站擁有大量流量,不如您注意到的那樣。而存儲會話數據的替代方法幾乎都難以實現,並且傾向於具有有趣的失敗模式。

我建議的唯一事情就是要小心你在會話中所做的事情 - 即使流量較低,大量數據也會有顯着的影響。經典的錯誤是無意中將整個業務邏輯層的對象樹加載到會話狀態中。

例如,假設您正在構建購物車;當客戶點擊「添加到購物籃」時,您想要記住他們添加的商品。因此,您可以將該項目的唯一ID添加到會話中,但是每次展示籃子時都必須查看價格和說明,這是一件痛苦的事情。因此,您決定將表示該項目的對象加載到您的會話中。此對象包含價格和說明,但也包含項目的類別以及該類別中的所有其他項目,因爲您的應用程序未使用延遲加載。因此,現在,購物籃中的每件商品還包含數百或數千個其他物品;在你知道你在哪裏之前,你已經將你的整個數據庫加載到了會話中。

+0

有沒有一種方法來衡量它消耗的資源量?我只想估算我的網站。 – Googlebot

+0

http://stackoverflow.com/questions/1075419/how-to-find-memory-used-by-an-object-in-php-sizeof - 編輯答案顯示反模式的一些例子。 –

+0

我經常使用memory_get_usage()來估計我的腳本使用情況。但關於session_start(),我認爲在大量的併發使用情況下應該有所不同。 – Googlebot

2

一般來說,不要擔心優化,直到您看到您的網站開始抓取。

在每個頁面上使用session_start()根本沒有害處,實際上它對於使用驗證的網站來說是相當標準的。

相關問題