2013-03-12 16 views
1

我有一個快速的search,似乎所有相關的問題都不完全符合我的觀點,或者太具體而無法幫助我。

我的首要考慮是表現。我的理解是,默認情況下,在$_SESSION之內存儲信息意味着服務器將文件寫入磁盤。對於小型LAMP服務器或基本小型託管網站,在數據庫成爲更有效的選項之前,您的變量需要多大才能獲得。 $_SESSION中的10,100,1000,10000陣列成員是否會開始考慮使用數據庫?還是交通更多的考慮?

第二個考慮因素是安全性。在其他一些答案中,我看到類似這樣的語句「永遠不會在xxx變量$_SESSION變量」中存儲。將信息存儲在數據庫中實際上比$_SESSION更安全,或者可以將$_SESSION與數據庫一樣安全,因爲服務器設置正確?

我的感覺是,很多在野外開發的網站都會先從$_SESSION開始,而不一定會重構使用數據庫。如果您可以將文件中的$_SESSION變量重定向到數據庫,那麼它總是總是更好使用$_SESSION並且稍後指出在數據庫中如果性能是一個問題?

是否有任何其他的考慮,使這種設計選擇?

+0

下面是一張白紙,可能提供一些線索:http://www.acros.si/papers/session_fixation。 pdf – 2013-03-12 11:53:50

+0

另外,看看:http://www.php.net/manual/en/session.security.php – 2013-03-12 11:54:35

+0

你知道,沒有這樣的媒體稱爲'數據庫'。數據庫服務器是一個軟件守護進程使用完全相同的磁盤來存儲數據。數據庫表是物理上僅僅是一個磁盤文件 – 2013-03-12 12:03:23

回答

0

我不認爲我會擔心你的會話文件的大小,因爲它使用數據庫更具可擴展性,我懷疑你會注意到一箇中小型網站的巨大性能差異。

至於安全方面,不建議將用戶數據存儲在會話中(用戶名,散列,電子郵件)。如果你想使用純粹的會話,你可以看看CodeIgniter等許多框架提供的加密會話。

因此得出結論,在我看來,你應該總是使用用戶信息(包括IP地址)和會話一般數據的數據庫(搜索條件,分析等)

希望這有助於你你的決定。

問候, 詹姆斯

3

你錯過了主要的事情,這就是,無論你在數據庫中存儲爲無限期持續,而會話只持續到用戶註銷或過期。

所以在數據庫中存儲某些東西的主要原因是要保留

在任何需要可擴展性的站點上,實際上您會將會話存儲在數據庫中,因此關於性能的第一點是無關緊要的。

至於安全性,只要會話數據被正確加密,就足夠安全。

1

我個人只會使用會話來存儲最少的信息。如果您需要在會話中存儲10,000個陣列項目,則最有可能寫入不同的內容。

默認情況下,PHP會話存儲在磁盤上。

某些發行版帶有強化的PHP,名爲suosin http://www.hardened-php.net/suhosin/,它可以設置爲加密會話。

至於如何有效的會議,我會說非常。你可能永遠不必擔心這個問題,如果你遇到問題的時候,你可能會想將會話存儲在內存中而不是磁盤/數據庫中。

這有可能改變PHP會話如何存儲/加載,檢查了這一點: http://php.net/manual/en/session.customhandler.php

相關問題