2009-12-11 55 views
7

我剛剛完成了關於Web應用程序的期末考試。把一個相當簡單的(雖然很長--12頁)考試放在一邊是一個問題,要求我們編寫會話的實現,類似於javax.http.HttpSession所做的。HttpSession是如何實現的?

我不願意承認,這難倒我。我使用HashMap發佈了一個相當BS的實現,並且使用隨機cookie字符串映射到服務器上的序列化HashMap來做一些瘋狂的事情,但我確信它是假的...現在我渴望知道它是如何實際的完成。

尤其是誰的人已經使用PHP廣泛,但不管是什麼原因從未費心去學習背後的便利魔法,我非常有興趣瞭解更多關於會話的基本實現。 J2EE和PHP是肯定的,但任何其他語言/框架也都很棒。謝謝!

回答

8

從我的理解 - 你靠近。

從我的理解什麼本質上是一個MD5「ID」被保存在客戶端,並通過Cookie或修改GET傳遞的cookie。

在服務器端的「會話」的數據與匹配的會話ID被保存在一個臨時文件(在Linux上被默認到/ tmp)。我相信會話目錄可以在PHP.ini文件中設置。

+1

+1,非常簡潔的總結。在PHP中,您還可以非常輕鬆地實現您自己的會話控制處理程序,以防您想要爲會話數據使用數據庫或其他來源。從本質上講,會話只是一組獨特的數據,有幾種方法可以與數據進行交互(保存,更新,刪除),數據通過一個可識別的小型令牌與用戶綁定。一個cookie或GET參數。 – zombat 2009-12-11 00:55:54

+1

可能值得大聲呼籲,cookie的名稱分別是JSESSIONID和PHPSESSIONID。他們也不一定是餅乾。它們可以是URL的一部分,例如:jsessionid = 或; phpsessionid = 。 – 2009-12-11 01:03:56

+0

瞭解會話的HTTP端的一個好方法就像HTTP標頭:https://addons.mozilla.org/en-US/firefox/addon/3829 – 2009-12-11 01:06:42

1

因爲它是一個接口,可以看看如Tomcat的開源Web容器實現它的類(ES),並看到自己。