2010-11-25 62 views
51

正如標題所說,會話變量是否存在限制(如果有)或者他們被認爲是通常的變量並且可以存儲等量的數據?會話變量是否有限制?

我在尋找是否有任何其他限制,如最大長度,最大值等變量類型的。

P.S.如果問題不清楚,請告訴我。

在此先感謝!

回答

50

正如@Thariama所說,變量的數量沒有限制;另外,對於可以存儲在會話中的數據量沒有限制(我已經看過幾十MB的會話)。由於會話的大小變大,您將遇到各種各樣的怪癖:PHP 5將整個會話反序列化到內存中session_start()(使用默認會話處理程序 - 當然,您可以使用make you own solution);有20 MB的會話和50個併發用戶,你的腳本開始受到磁盤訪問速度的嚴重限制(也就是「腳本啓動速度慢得像糖漿一樣 - 會話本身就佔用一個GB RAM)。最後,我們專門設計了一個盒子,以便在RAM中保留儘可能多的會話,前端盒子通過NFS訪問它們(儘管它對我們有幫助,但這對您來說可能有點過分)。

注意,對於許多併發用戶數和會話存儲在磁盤上的臨時會話文件的數量可能會導致文件系統限制的問題(例如,有多少文件可以在一個目錄中,您遇到的問題與stat()performance前),或其他限制(我們曾經發現一個盒子被配置爲只允許同時打開4096個文件的難題)。這些都不是會話特定的,但可以通過會話處理觸發。

15

不,不限制會話可能擁有的太多空間(或會話可能擁有多少變量)。 唯一的限制是您的計算機上的規格,這是由您的php.ini中的可用memory_limit定義的。 請注意,此空間將在所有用戶的所有會話中共享。

+0

問題不在於我可以擁有多少個會話變量,而是他們每個人可以存儲多少數據。 – jolt 2010-11-25 08:26:44

8

它完全特定於您的網絡服務器。對於Apache,看看這裏:

http://httpd.apache.org/docs/trunk/mod/mod_session.html

它甚至會話可以通過使用mod_session_dbd被存儲在數據庫。因此可以克服每個會話1個文件的物理限制。而且,Apache可以配置爲跟蹤存儲在特定服務器或服務器組上的每個用戶會話的可伸縮性。

+0

您可以在PHP中編寫自己的會話處理程序來完成這一任務 - 儘管編譯後的模塊可能更有效。 – Piskvor 2010-11-25 08:33:30

+5

@shamittomar:如果downvoter沒有留下評論,即使你問他們,他們也可能不會離開。對於單一的降價,我不會擔心它 - 只是一個無知/隨機/驅動器的downvoter。 – Piskvor 2010-11-25 08:38:35

3

簡單的答案是否定的。 (也就是說,它們沒有比其他任何PHP變量具有的限制...必須適合內存等)

但是請記住,$_SESSION數據存儲在某個地方,默認情況下爲一個文件中的序列化數據每個會話。所以有實際的限制。您不希望在其中存儲大量信息,因爲它們會在每個使用session_start()的頁面上的數據存儲中加載/保存。

相關問題