檢索用戶的Cookie並獲取其值作爲PHP變量比檢索會話變量慢嗎?如果可能,應該使用cookie嗎?
回答
不是。純粹的技術術語,它可能是相反的,因爲初始化會話會有一些小的開銷。
Cookie數據作爲HTTP請求的一部分進入,無論如何,PHP默認將其讀入$ _COOKIE。所以它總是會在那裏。 $ _SESSION要求您在某個時間撥打session_start()
。
但是,兩者之間的性能差異將會小得可笑,不值得擔心。
我相信它會是相同的,除了會議將從磁盤來。無論如何,該會話還是來自cookie。
從安全的角度來看,你真的想在客戶端存儲信息嗎?通常情況下,我不會將東西存儲在客戶端。
會話默認已經由名爲phpsessionid
的Cookie支持(以便服務器能夠識別客戶端並將其與服務器內存中的某個會話相關聯),因此您的擔心實際上沒有意義。
使用$_SESSION
而不是用「自定義cookie」重新創建它只是更容易。
會話變量不是對普通cookie的奇特抽象。 – 2010-01-03 03:49:25
這完全取決於「自定義cookie」的用途。但是,他的問題並非如此。 「 – BalusC 2010-01-03 03:51:25
通常,您不應該擔心會話變量或cookie的檢索速度。
您應該然而,知道它們之間的區別:
會話存儲的服務器,這意味着客戶不必訪問您存儲有關它們的信息。會話數據存儲在您的服務器上,不需要每頁都完整地傳輸;客戶只需發送一個ID並從服務器加載數據。
另一方面,Cookie存儲在客戶端。它們可以長時間持久使用,並且可以讓您在擁有一組Web服務器時更加順暢地工作。然而,與會話不同,存儲在Cookie中的數據會隨每個頁面請求一起完整傳輸。
在某些瀏覽器,它是不可能存儲的cookie,以避免這個問題,你可以通過一個SID(會話ID)或一些隱藏的,充滿,文本框的值,而不是餅乾,通過使用GET和POST方法。
這將是非常繁瑣而繁瑣的工作。如果用戶想要回到域名會發生什麼?如果用戶在GET請求的情況下修改URL,會發生什麼情況? – Nirmal 2010-01-03 09:17:04
如果用戶更改了url中的sid,它就像更改cookie(這是可能的) – 2010-01-03 10:22:01
儘管從代碼操作角度來看大致相當,但Cookie和會話變量是非常不同的東西。
Cookie存儲在瀏覽器中,並隨每個請求一起發送到Web服務器。如果您在用戶的瀏覽器中存儲大型cookie或大量小型cookie,則會增加每個請求/響應的大小,從而導致每次點擊成本更高(帶寬),速度更慢(時間)。此外,存儲在cookie中的任何東西都可以被客戶看到,因此避免存儲任何敏感的東西。
另一方面,會話變量有自己的一套問題。由於它們存儲在服務器上下文中,因此它們不會在集羣服務器之間傳播。如果服務器/服務重置或用戶的會話超時,則存儲在會話[]集合中的任何內容都將丟失。將大量數據存儲在會話變量中會導致服務器的性能損失,如果您擁有大量流量,這可能會非常糟糕。會話變量需要一個cookie,服務器用它來識別用戶的會話。這是可行的用戶改變他們的cookie來訪問存儲在其他會話數據,儘管這會是相當刻着很難與任何類型的值做到,因爲會話ID是隨機的,沒有意義的僞標識。
最終,所有的垃圾都應該被存放在一個數據庫反正。會話是一種懶惰的方便,在開發任何強大的應用程序時應該避免。應該儘可能少地使用Cookie--通常,我將cookie存儲在cookie中,這可以幫助我識別用戶(類似sessionID cookie,但是特定於應用程序),但其他所有內容都會存儲在數據庫中。這使您的服務器無關的數據可用性,安全存儲,數據生命週期您的應用,而不是服務器的配置,良好的查詢和報表功能設置等做對的時候
數據庫是容易的。有很多很多的原因,你收集任何狀態信息應存儲在數據庫中,並沒有充分的理由不來。
- 1. 我應該使用Cookie嗎?
- 2. 如果我可以自己開發,我應該使用CMS嗎?
- 3. 如果可能,我應該省略異步/等待嗎?
- 4. 如果可能,我應該最終設置對可變對象的引用嗎?
- 5. 我應該儘可能使我的功能儘可能通用嗎?
- 6. 我應該使用countif功能嗎?
- 7. 使用功能後應該返回嗎?
- 8. 我應該使用咖喱功能嗎?
- 9. 如果我使用不同的ViewItemTypes,我應該使用viewHolders嗎?
- 10. 如果configure.ac可用,應該分發「configure」腳本嗎?
- 11. 會話cookie應該始終爲HttpOnly嗎?
- 12. 我應該儘可能避免使用魔術字符串嗎?
- 13. 使用https時應該加密cookie內容嗎?
- 14. gwt使用jquery效果可能嗎?
- 15. 蘋果會因爲使用cookie而拒絕應用程序嗎?
- 16. 如果我沒有使用它的功能,我應該包括Facebook JavaScript SDK嗎?
- 17. 如果沒有提供可選參數,它不應該使用默認值嗎?
- 18. 如果屬於對象是可選的,你應該使用belongs_to嗎?
- 19. 如果if包含返回值,我應該使用else嗎?
- 20. 如果模式過於動態,我應該使用貓鼬嗎?
- 21. 如果使用SSL,我們應該自己加密數據嗎?
- 22. 如果表格無意義,我應該使用主鍵ID嗎?
- 23. 如果我使用BLL,我還應該訪問DAL嗎?
- 24. 殭屍/蜘蛛可以使用Cookie嗎?
- 25. 使用jsonify時可以設置cookie嗎?
- 26. 我可以在Phonegap中使用Cookie嗎?
- 27. XPage - 使用SSJS訪問dojo cookie變量 - 這可能嗎?
- 28. 我應該使用AJAX嗎?
- 29. 我應該使用document.writeln嗎?
- 30. 我應該使用convertView嗎?
聽起來不錯,我將使用會話不管,但我想添加更多的東西進入我的餅乾,但我有一個壞的經驗一次,它是JavaScript的使用cookie,但並沒有PHP,我的PHP頁面將加載,然後JS會讀一個cookie並責令基於cookie數據在頁面上的某些項目的位置,並減緩了頁面朝下放在頁面加載 – JasonDavis 2010-01-03 03:53:02
很多這不是真的。 Cookie會在頁面生命週期之外產生性能問題 - 在發送響應之前處理和寫入頁面之前會讀取它們。會話變量在服務器中產生命中,只對頁面呈現時間沒有影響循環的請求/響應部分。這些是蘋果和桔子。在PHP中, – 2010-01-18 17:54:39