2010-01-03 74 views

回答

2

不是。純粹的技術術語,它可能是相反的,因爲初始化會話會有一些小的開銷。

Cookie數據作爲HTTP請求的一部分進入,無論如何,PHP默認將其讀入$ _COOKIE。所以它總是會在那裏。 $ _SESSION要求您在某個時間撥打session_start()

但是,兩者之間的性能差異將會小得可笑,不值得擔心。

+0

聽起來不錯,我將使用會話不管,但我想添加更多的東西進入我的餅乾,但我有一個壞的經驗一次,它是JavaScript的使用cookie,但並沒有PHP,我的PHP頁面將加載,然後JS會讀一個cookie並責令基於cookie數據在頁面上的某些項目的位置,並減緩了頁面朝下放在頁面加載 – JasonDavis 2010-01-03 03:53:02

+0

很多這不是真的。 Cookie會在頁面生命週期之外產生性能問題 - 在發送響應之前處理和寫入頁面之前會讀取它們。會話變量在服務器中產生命中,只對頁面呈現時間沒有影響循環的請求/響應部分。這些是蘋果和桔子。在PHP中, – 2010-01-18 17:54:39

0

我相信它會是相同的,除了會議將從磁盤來。無論如何,該會話還是來自cookie。

從安全的角度來看,你真的想在客戶端存儲信息嗎?通常情況下,我不會將東西存儲在客戶端。

2

會話默認已經由名爲phpsessionid的Cookie支持(以便服務器能夠識別客戶端並將其與服務器內存中的某個會話相關聯),因此您的擔心實際上沒有意義。

使用$_SESSION而不是用「自定義cookie」重新創建它只是更容易。

+0

會話變量不是對普通cookie的奇特抽象。 – 2010-01-03 03:49:25

+0

這完全取決於「自定義cookie」的用途。但是,他的問題並非如此。 「 – BalusC 2010-01-03 03:51:25

7

通常,您不應該擔心會話變量或cookie的檢索速度。

您應該然而,知道它們之間的區別:

  • 會話存儲的服務器,這意味着客戶不必訪問您存儲有關它們的信息。會話數據存儲在您的服務器上,不需要每頁都完整地傳輸;客戶只需發送一個ID並從服務器加載數據。

  • 另一方面,Cookie存儲在客戶端。它們可以長時間持久使用,並且可以讓您在擁有一組Web服務器時更加順暢地工作。然而,與會話不同,存儲在Cookie中的數據會隨每個頁面請求一起完整傳輸。

+2

+1」用於「存儲在Cookie中的數據與每個頁面請求完全一起傳輸」......並且可能還包括每個圖像,腳本和樣式表請求。這就是爲什麼你想保持你設置的cookie數量最少。如果您有大量數據,請將其存儲在服務器端,並將其關閉一個更小的ID cookie。 – bobince 2010-01-03 04:07:26

+0

爲什麼不在Cookie中存儲ID並從數據庫中檢索該ID的相關信息?首先,Cookie主要不是用於性能方面的原因,而是因爲它們的持久性和服務器獨立性。 – Nirmal 2010-01-03 09:13:45

-1

在某些瀏覽器,它是不可能存儲的cookie,以避免這個問題,你可以通過一個SID(會話ID)或一些隱藏的,充滿,文本框的值,而不是餅乾,通過使用GET和POST方法。

+0

這將是非常繁瑣而繁瑣的工作。如果用戶想要回到域名會發生什麼?如果用戶在GET請求的情況下修改URL,會發生什麼情況? – Nirmal 2010-01-03 09:17:04

+0

如果用戶更改了url中的sid,它就像更改cookie(這是可能的) – 2010-01-03 10:22:01

0

儘管從代碼操作角度來看大致相當,但Cookie和會話變量是非常不同的東西。

Cookie存儲在瀏覽器中,並隨每個請求一起發送到Web服務器。如果您在用戶的瀏覽器中存儲大型cookie或大量小型cookie,則會增加每個請求/響應的大小,從而導致每次點擊成本更高(帶寬),速度更慢(時間)。此外,存儲在cookie中的任何東西都可以被客戶看到,因此避免存儲任何敏感的東西。

另一方面,會話變量有自己的一套問題。由於它們存儲在服務器上下文中,因此它們不會在集羣服務器之間傳播。如果服務器/服務重置或用戶的會話超時,則存儲在會話[]集合中的任何內容都將丟失。將大量數據存儲在會話變量中會導致服務器的性能損失,如果您擁有大量流量,這可能會非常糟糕。會話變量需要一個cookie,服務器用它來識別用戶的會話。這是可行的用戶改變他們的cookie來訪問存儲在其他會話數據,儘管這會是相當刻着很難與任何類型的值做到,因爲會話ID是隨機的,沒有意義的僞標識。

最終,所有的垃圾都應該被存放在一個數據庫反正。會話是一種懶惰的方便,在開發任何強大的應用程序時應該避免。應該儘可能少地使用Cookie--通常,我將cookie存儲在cookie中,這可以幫助我識別用戶(類似sessionID cookie,但是特定於應用程序),但其他所有內容都會存儲在數據庫中。這使您的服務器無關的數據可用性,安全存儲,數據生命週期您的應用,而不是服務器的配置,良好的查詢和報表功能設置等做對的時候

數據庫是容易的。有很多很多的原因,你收集任何狀態信息應存儲在數據庫中,並沒有充分的理由來。

相關問題