聽完 JavaTwo 孫三才講師演講完後關於 JSP Session 的一個疑問 |
尚未結案
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
一般書上常教的做法是把變數暫存在 session 中以實作類似購物車功能,當然我也不例外採用此做法。
但孫講師的論點,因為要實作 Load Balancing & no cookie ,所以可能有很多 Web Container 在不同 PC,也就是說不可以用 session 來暫存資料了,而必須把暫時性的資料儲存在 Database or File 裡。(我大概描述孫講師的結論,希望大家懂我的意思)
結果我回家馬上作測試,把 Browser Cookie 安全性設成最高(表示禁用 Cookie),結果我的網站就不能正常使用了,因為我會在登入後的每一個 Page 去檢查 session 理登入身分和正確性,但 session 在轉到新頁面時已經不見了(JSP 無法從 User 端 Cookie 取出 session information...)。
這又延伸另一個問題,用 Tomcat Manager 觀察該 Web Server session count 會一值累增,日基月累下來想必會造成負擔,且易成為人家攻擊弱點(一值用禁用 cookei 的連線來 request,讓 Tomcat 負荷大增...)。 經過一番思索,我把我想像中的做法描述如下,不知道對不對,請各方先學不吝指教:
當 A.jsp 產生第一個新的 session 時,馬上將 session 『序列化』存入資料庫,而資料庫為兩個欄位(SessionID,SessionObj),導向 B.jsp (或爾後所有新的 Page)時設法在 B.jsp 藏一個隱藏欄位 SessionID 以方便再從資料庫中取出,B.jsp 需要用到 Session 時在依隱藏的 SessionID 為 Key 去資料庫中抓取出 SessionObj 來讀取或寫入,若有寫入則在存入 DB 一次,爾後皆如此辦理。
上述做法聽起來似乎很麻煩但相信寫成共用模組會好些。不知道我這樣的想法和做法是否正確呢? 謝謝! JackTasy
------
JackTasy |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
你可以去 http://edu.uuu.com.tw/jspwidget/default.jsp 安裝jspwidget後也安裝他的範例程式 執行起來就可以研究了,在進階技巧->延展性的區段操作範例程式看看, 它使用了兩個方式並行,log in database and file,並且有設定session time out, 比較需要注意的是他的範例程式都是架構在他所設計的jspwidget上,不過也是有提供source可以參考. 我也在研究當中,歡迎在ktop上一起討論,你也可以在孫講師的留言版跟他請教也可以,他都會回答.
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
引言: 您客氣了,在delphi的世界我只是個中手,在java的世界我也還只是個低手. 不過,java的使用需要有更穩固的物件導向基礎... 最近正在怨嘆基本功夫不夠... >>< face="Verdana, Arial, Helvetica"> 呵呵 在 java 世界裡我也是個低低手,同時想兼顧 Delphi & Java 讓我有點吃力呢(不知 hahalin 是否也有同感) 抱歉稍微離題一下,領略了 java 物件導向後反而讓我開發 Delphi 思維不一樣了,我想這就是學兩種語言的其中一個好處吧。 以下提供我個人小小心得參考,用 java 物件導向觀念來撰碼,一定要先研究好 Collection & Pooling 觀念,搞懂了之後讓我在爾後很多複雜需求上都能應用自如呢,我甚至自己寫了 JSP Connection Pooling 。 ps:Collection 是指一些容器類別,如 Array,LinkList,HastMap,TreeMap,Set...等,我是看 Thinking In Java Chap 5 ,這真是一本好書啊 < >< > JackTasy
------
JackTasy |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言:引言: < >< > 厲害厲害,不知道有沒有機會可以請你指點如何設計>>< face="Verdana, Arial, Helvetica"> 好說好說,我找個時間整理一下再分享出來給大家參考參考。 真的有點離題嘍,孫講師的網站資源很多很豐富,研究完可能要花一段時間,且我尚不確定是否可找到我要的答案,還是希望大家能多多提供想法和做法一起討論討論。 >>< face="Verdana, Arial, Helvetica"> 抱歉,插嘴一下. session是可以序列化存成硬碟的檔案,檔名就直接以session id為命名. 為了clustering,直接把你這些session物件放在共享磁碟機(目錄)中. 這樣.loading balance應該可以實作了吧. 為了怕曠日廢時,某些阿撒布魯的session檔,可以由系統的crown定期去砍檔就好了 關於這樣的實作,可以參考以前(四五年前吧)一個叫bluestone的ap server的loading balance架構.他的session是放在database的. 目前weblogic seseion是放在共享的記憶體中,所以速度會快很多.webspher的話,小弟就沒玩過. connection pool實作是常常有要配搭執行緒(觀察某些connection是否該真的close,或是安排例外處理),然而,pooling事小,交易事大. 這方面的實作,可以參考別的論壇: http://www.javaworld.com.tw/jute/post/view?bid=21&id=2627&tpg=1&ppg=1&sty=1&age=0#2627 一般的ap server都是會有自己的data source去maintain connection pool, Tomcat 4.1.x就有內建connection pool了,當然也有的是driver本身就有對jdbc3的支援才行,如postgreSQL driver的connection pool在tomcat中的配置如下: http://castor.exolab.org/pooling.html 當然,精實一點,你有機會實作的話,對於你日後的programming功力也不無小補. 希望對你的實驗有點幫助. (sorry,三四年沒有在寫web base的東西了,希望資料不會太舊) --------------------專案未完人----------------------------------------- |
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
|
JackTasy
初階會員 發表:22 回覆:97 積分:28 註冊:2002-06-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |