簡體   English   中英

會話變量

[英]Session variables

大家好 我目前正在開發一個項目,該項目使用了存儲在會話變量中的大量數據。 我的問題是這種方法的可靠性如何,是否會影響服務器性能和內存使用率。 基本上,您會在會話變量和cookie之間進行選擇。

通常,會話變量將更加安全,因為用戶無法在其計算機上本地對其進行編輯。

但是真正的問題是,您要存儲什么? 有了更多的信息,我們也許可以為您提供一個更好的答案,關於您希望將其存儲在何處:)

Edit:

如果您要存儲用戶操作,建議您建立一個UserActions表或類似的東西。 包含以下內容的表:

id INT (generic ID for the record),
timestamp TIMESTAMP/DATETIME (whatever your DB supports),
userid INT (lookup to the user table),
action VARCHAR (what action you want to record),
etc etc (whatever else you want to store)

然后,當用戶執行您要記錄的操作時,只需將其記錄到表本身中,而不是使其與用戶一起在會話/ Cookie中旅行。 實際上,除非頁面本身是“多步向導”類型的應用程序,否則頁面本身不需要知道用戶過去執行過哪些操作。 在這種情況下,最好將它們作為會話變量傳遞。

然后,您將存儲推送到一個真正的存儲組件(即數據庫)中,而不是將會話/ cookie用作存儲。

我的意思是我們仍然對您正在開發的內容還沒有真正的了解,但我希望它能對您有所幫助。

會話變量通常比cookie更可取。 也就是說,它們通常存儲在Web服務器上的/ tmp目錄中,該目錄在世界范圍內均可讀取和寫入。 如果您不控制服務器或在共享環境中運行,這可能是作弊的溫床。 不將敏感信息存儲在會話變量中,並且不依賴它們來處理必須工作的東西是一種好習慣。

僅在需要每個用戶的數據在會話之間持久化時,才應使用cookie。 也就是說,如果他們在會話到期時間之外重新訪問該站點,那么您需要那里的數據。

否則,如果數據僅用於其當前會話,則繼續將其放入$ _SESSION。 那是為了什么。

會話數據通常存儲在服務器上的文件或數據庫中。 因此,有多少數據僅取決於您的腳本。 如果要在會話中存儲較大的二進制文件,則可能會很快達到內存限制。

將數據存儲在cookie中並不總是一個好主意。 客戶可以看到這些數據,他可以輕松更改它,在某些情況下,這是您絕對不允許的。

會話變量不需要用戶提交,它們只是基於會話密鑰加載的。 內存使用量取決於會話的實現,因為從數據庫(或文件系統,內存或w / e)中檢索會話存在成本。

在將信息保留在服務器上(使用更多的內存)和將某些數據推送到客戶端計算機(增加帶寬和降低安全性)之間,始終是一個折衷。 根據經驗,我更喜歡會話,它們更安全且易於管理。

當我寫這個問題時,我正在考慮非敏感數據以及用於在網站上記錄用戶活動的應用程序。 我認為,對於一個擁有大量用戶的繁忙服務器,最好使用cookie代替,它將卸載服務器資源(內存,硬盤I / O)。 在性能方面,我認為會話變量是更好的解決方案。 無論如何,我不知道它將更好地擴展SV解決方案。

完全使用任何會話變量意味着您的應用程序服務器需要通過適當的同步來維護會話狀態。

這會產生開銷,並且可能會對應用程序的可伸縮性產生負面影響,因為每個服務器都需要(可能)知道每個會話-這將意味着會話數據和同步的大量跨服務器流量。

雖然只有一台服務器,但是沒關系。

當越來越多的服務器在地理上分布時,它變得越來越痛苦。

會話的序列化/反序列化會有一些開銷,但是實際上這不是問題,因為每個請求相對固定,因此可擴展到高流量應用程序。

暫無
暫無

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

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