簡體   English   中英

訪問會話變量和性能

[英]Accessing Session variable and performance

我內部有一個Web應用程序,需要檢查用戶是否具有足夠的權限/角色/權限來訪問頁面。 我已經在具有USER_IDROLE_ID的表中設置了用戶權限。 當用戶登錄到應用程序時,我將讀取該用戶的記錄,並構造一個字符串並分配給會話變量。 當登錄的用戶訪問每個頁面時,我將從會話變量中讀取值,然后解析該字符串,然后檢查該用戶是否具有足夠的權限分配給它。

現在,我擔心訪問每個頁面負載中的會話變量是否會影響性能。 有其他解決方法嗎?

您應該會看到性能的凈增長。

加載會話將花費一些資源,但是通常比從數據庫檢索記錄所需的資源少得多,這可能涉及創建連接,認證,解析查詢,檢索記錄並通過數據庫發送記錄。網絡。 相比之下,從硬盤驅動器中刪除會話文件要快得多。

聽起來確實像您在嘗試過早優化。 您應該等待一會兒,然后進行監視以查看瓶頸的真正位置。

不,它不會以明顯的方式影響網站的性能(除非您每秒有數百個用戶)。

但我注意到了一些:

(...)我將讀取該用戶的記錄,並構造一個字符串並將其分配給會話變量。 當登錄的用戶訪問每個頁面時,我將從會話變量中讀取值,然后解析字符串(...)

哈! 看到,會話不過是在session_start()上編碼和解析的字符串(通常,為此使用serialize()unserialize() )。 您無需手動編碼將要存儲在會話中的數據,它已經為您完成(並且definitley比任何自定義方法都快,因為這些功能是在核心中實現的)。

如果您使用PHP本機會話處理程序,則無論您是否訪問會話數據,都可能會在使用該會話的每個請求中檢索會話數據。 並且由於默認的會話處理程序使用文件來存儲數據,因此也會導致在每次請求時都讀取文件。

如果要對此進行優化,則可以在其中存儲會話的地方使用某種緩存。也許是諸如APCMemcache之類的內存緩存(另請參見session_set_save_handler函數的此注釋 )。

除了上述格雷格所說的。

php中有2種會話類型。 存儲在數據庫中的會話和存儲在文件中的會話(通常在/ tmp / session_something中);

數據庫選項在創建套接字和發送/檢索數據方面有開銷。 它具有諸如會話能夠在多台服務器/機器之間持久化的優點。

將會話信息存儲到文件中的第二個選項可能是性能最佳的,因為像Linux這樣的操作系統可以緩存/緩沖對內存中文件的讀寫操作。

如此簡短的答案是,甚至不必擔心開銷,它不是什么,不是誘餌,但是如果您真正關心性能,則不會使用PHP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM