JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Servlet/JSP 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:在不同的網站間分享session [Re:aladdin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-08 11:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
接下來的東西,是網站app的abc,即便你已經很熟悉,最好還是看一下。如果我有弄錯的部分,請指出來,以免後面的討論失去的焦點。

What’s a cookie?

Cookie,從純技術面來說,是一個browser進行http request時,放在header裡面的東西(在header中透過Cookie:指定)。但是這個東西跟一般放在http request header裡面的東西,不一樣的地方在於:

1. http response header也可以指定cookie。如果http response指定要設立新的cookie(一樣存在在http response header裡,透過Set-Cookie:指定要增加的部分)把cookie放在header裡,browser就會把cookie所帶來的資訊存在browser端。透過expire date的指定,你可以決定這段資訊的儲存時限是暫時還是永久。

2. 網頁透過script的設定,也可以指定cookie。

3. 每次browser提出http request時,如果該資訊存在於browser端,browser就會自動把該資訊放回http request。(也就是說,除非另有指定,否則user agent應該在每次提出http request的時後,將本地cookie的內容,放在header中的Cookie:送回)

4. 為了安全的原因,browser不是每次都把cookie原封不動的放進http request header裡。每次browser在製作http request的時候,只會把符合條件(domain, path, expired date等等)的資訊放在header裡。

5. 上一段話最主要的一個限制是:不論是http request所回的,或是script在網頁裡設定的cookie,browser都「自動」返回該domain的儲存資訊。Browser絕對不會把其他網域的cookie給你(除非你透過cookie的domain進行設定,還得要符合網域名稱的擴大條件)。

修正一
什麼是cookie domain的擴大條件?如果你在www.main.aaa.com的網域中指定一個cookie,你可以指定只讓www.main.aaa.com看得到,也可以擴大到讓abc.main.aaa.com與www.main.aaa.com都看得到(如果domain的指定是main.aaa.com);同樣的,也可以指定到financial.aaa.com與上面的網站都看得到(domain指定到aaa.com)。當然,當domain的限定只剩com的時候,就表示,在規格上,aaa.com與bbb.com都可以看到該cookie。但實際是不是這樣,請大家自己試試了。(順帶一提,就算這樣可以分享cookie,也不應該是我們分享session時用的方法,因為太不安全了。)
end of 修正一

What’s a session?

Session,就沒有大家公認比較好的定義了。不過在實際上,session可以視為一段資訊,在server端透過某些機制,確保所有的使用者都能夠

1. access屬於該使用者的該段資訊。

2. 無法看到別人的該段資訊。

3. 為確保以上事情能夠確實執行的相關機制。

為了做到以上三件事,server端發展了許多技術。這些東西,總結,我們稱他們為session。

Session與cookie的關係:

上面那一段中的第一點;每個使用者都可以access屬於該使用者的該段資訊,是我們主要的目標。要達到這一點,browser與http server之間的溝通要能夠辨識任何一個進來的http request該和哪一個server端的session資訊連接在一起。為了達成這件事,這個掛勾的動作應該要能:

1. 當我們需要辨識使用者的時候,這個進來的http request要包含足夠的資訊讓我們分辨該用哪段session資料對應這個http request。(也就是說,不見得每個http request都需要做這個辨識)

2. 這個技術要不易偽冒。

Cookie為什麼會和session扯上關係?因為cookie是整個http相關技術中,一旦資訊設定之後,就會在每個http request重複出現的最簡單作法。也就是說,我們如果在cookie存入session相關的辨識資訊,以後該browser每次的http request,都可以讓server辨識該唯一的session 資訊。於是,透過cookie,我們就讓每次的http request都可以辨識並使用同一段session資訊。

使用cookie辨識session的假設前提是:每次browser的http request都會把此段資訊送回。但如果不是呢?也就是當cookie被disable掉了,我們該怎麼辦?這個時候,URL rewriting(用get)與form hidden field(get與post皆可)就派上用場了。這樣,透過不同的方式,我們還是可以確保,當我們需要http server辨識我們是誰並據以取用session時,server還是可以辦到。

防偽的session辨識需要哪些機制?

所有的session機制,都在這個問題上打轉。由於只要在cookie上設定一個識別號碼(或是由url rewriting傳回)就可以從http request辨識session,所以

1. 在這個號碼上想辦法加密。

2. cookie使用的是 name=val的表示法。進一步在name上動手腳作為id的verification則又加上了一層保險。比如iis的asp,cookie前面的name,其實是後面val的一個hash code。

這兩點,其實用URL rewriting與form hidden field都不難做到。只是在html網頁製作的時候,會有許多額外的技術要求,可能不是一般網頁art負擔得了的。

關於SSO

這裡會有一個問題:從「辨識該使用者的唯一身份」出發,我怎麼想(因為沒有實際透過identity server實作過),aaa.com讓使用者登入成功,但是bbb.com如果不去aaa.com走一遭(不論透過third party cookie還是redirect),server端還是不知道這個人在aaa.com的身份(因為沒有cookie或是其他可資憑證的資訊)。這一段是http的困境,我大概看了一下identity server所expose的API,即便有identity server也應該不會解決(這裡如果說錯,請指正)。

共享session

好了,進入正題了。

當初有這個想法,是因為兩年前在前一個公司,提一個案子的時候閒聊聊到的。那時我只管網頁製作前端的技術,前後端的資料溝通不歸我管,沒有仔細去想這個問題。最後,因為預算問題,這整個案子在「redirect來,redirect去」中結尾。這對於像我們這種「以美感取勝」的e-agency來說,是製作與maintain上很大的問題。

這兩天看j2ee的api,發現HttpSession是個interface而不是一個class。也就是說,這邊的implementation,應該也是基於安全的理由,而讓各家的ap server可以各自加上各自的安全條件實作。但我無法看出來這種修改是否可以在servlet的階層完成,還是得要上升到實作一個servlet container的程度。但不論如何,由於http request是由browser提出的,如果browser不支援該種interaction技術(就像我懷疑光靠identity server也無法解決透過多網站SSO的問題一樣),就只能透過URL rewriting與form hidden field來解決。

如果這個問題還是得靠URL rewriting與form hidden field來解決,那我還寧可用redirect。

看樣子,我的問題已經比較清楚了。

另外,關於third-party cookie。

從前面的說明中,我只能知道該網域替我加了一個cookie,至於這個cookie,並不必然有對應的session存在遠端的server上。我剛剛改了tomcat kick start中18章的filter例子,產生了third party cookie。希望晚上可以有機會確認是不是用該方法也可以產生session。


aladdin edited on 2003-12-09 07:13
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
51246 [精華] 在不同的網站間分享session aladdin 2004 2003-12-05 14:29
47601 Re:在不同的網站間分享session moszap 151 2003-12-05 14:45
47298 Re:在不同的網站間分享session aladdin 1180 2003-12-05 17:10
47050 Re:在不同的網站間分享session jini 1437 2003-12-05 19:20
46836 Re:在不同的網站間分享session aladdin 823 2003-12-05 20:20
46916 Re:在不同的網站間分享session aladdin 337 2003-12-10 18:15
45683 Re:在不同的網站間分享session sdargon 143 2003-12-10 16:41
45743 Re:在不同的網站間分享session aladdin 1585 2003-12-10 16:50
45533 Re:在不同的網站間分享session jog 37 2003-12-10 17:35
45666 Re:在不同的網站間分享session jini 1322 2003-12-11 00:05
45110 Re:在不同的網站間分享session jcwang6188 475 2003-12-12 13:59
44967 Re:在不同的網站間分享session Thinker 749 2003-12-12 16:12
44409 Re:在不同的網站間分享session chency 2580 2003-12-21 02:15
46347 Re:在不同的網站間分享session snpshu 176 2003-12-11 00:31
45240 Re:在不同的網站間分享session jini 302 2003-12-11 00:40
45203 Re:在不同的網站間分享session saijone 791 2003-12-11 05:09
45207 Re:在不同的網站間分享session aladdin 1755 2003-12-11 09:13
44961 Re:在不同的網站間分享session Forth 39 2003-12-11 12:44
45892 Re:在不同的網站間分享session im1000 1201 2003-12-11 19:06
44860 Re:在不同的網站間分享session aladdin 336 2003-12-12 10:14
45093 Re:在不同的網站間分享session snpshu 368 2003-12-11 08:58
44969 Re:在不同的網站間分享session jog 207 2003-12-11 11:09
44836 Re:在不同的網站間分享session aladdin 461 2003-12-12 09:11
45054 Re:在不同的網站間分享session ming215 734 2003-12-11 17:16
45035 Re:在不同的網站間分享session im1000 803 2003-12-11 18:59
44951 Re:在不同的網站間分享session aladdin 2284 2003-12-12 10:07
44821 Re:在不同的網站間分享session Biologic 854 2003-12-12 10:32
44747 Re:在不同的網站間分享session saijone 710 2003-12-12 12:56
44716 Re:在不同的網站間分享session subbug 246 2003-12-12 11:49
44676 Re:在不同的網站間分享session koji 90 2003-12-12 12:18
44586 Re:在不同的網站間分享session subbug 111 2003-12-12 13:13
44692 Re:在不同的網站間分享session popcorny 248 2003-12-15 00:52
44394 Re:在不同的網站間分享session 沒有人 487 2003-12-15 05:00
44305 Re:在不同的網站間分享session Biologic 590 2003-12-15 08:42
46107 Re:在不同的網站間分享session jini 106 2003-12-05 15:22
46316 Re:在不同的網站間分享session aladdin 116 2003-12-05 15:46
43543 Re:在不同的網站間分享session good 537 2004-01-27 11:47
46211 Re:在不同的網站間分享session jini 643 2003-12-05 15:28
46199 Re:在不同的網站間分享session aladdin 214 2003-12-05 15:48
45956 Re:在不同的網站間分享session saijone 1697 2003-12-07 01:03
45820 Re:在不同的網站間分享session jini 724 2003-12-07 01:26
46040 Re:在不同的網站間分享session Forth 80 2003-12-07 01:36
45960 Re:在不同的網站間分享session jini 1683 2003-12-07 12:25
44573 Re:在不同的網站間分享session Thinker 1809 2003-12-12 15:38
44506 Re:在不同的網站間分享session jini 643 2003-12-12 21:12
44506 Re:在不同的網站間分享session Thinker 598 2003-12-13 01:35
44655 Re:在不同的網站間分享session im1000 1338 2003-12-13 02:31
44475 Re:在不同的網站間分享session Thinker 2298 2003-12-13 11:49
44434 Re:在不同的網站間分享session saijone 2006 2003-12-13 23:05
44631 Re:在不同的網站間分享session Thinker 1933 2003-12-14 11:48
46251 Re:在不同的網站間分享session ingramchen 87 2003-12-06 03:33
45949 Re:在不同的網站間分享session jini 1281 2003-12-06 04:03
46621 Re:在不同的網站間分享session ingramchen 1420 2003-12-06 06:52
45901 Re:在不同的網站間分享session jini 582 2003-12-06 13:31
45921 Re:在不同的網站間分享session aladdin 1652 2003-12-06 13:51
45814 Re:在不同的網站間分享session Forth 137 2003-12-06 14:19
45934 Re:在不同的網站間分享session aladdin 1399 2003-12-06 14:50
45866 Re:在不同的網站間分享session jini 868 2003-12-06 14:41
45988 Re:在不同的網站間分享session ingramchen 768 2003-12-06 16:30
45870 Re:在不同的網站間分享session aladdin 187 2003-12-06 15:24
45800 Re:在不同的網站間分享session jini 297 2003-12-06 16:39
45874 Re:在不同的網站間分享session aladdin 871 2003-12-06 16:51
45842 Re:在不同的網站間分享session jini 1162 2003-12-06 19:43
45755 Re:在不同的網站間分享session Forth 125 2003-12-06 21:11
46013 Re:在不同的網站間分享session aladdin 3936 2003-12-08 11:16
45680 Re:在不同的網站間分享session Biologic 433 2003-12-08 12:28
45291 Re:在不同的網站間分享session Millerlai 0 2003-12-10 15:48
45191 Re:在不同的網站間分享session aladdin 610 2003-12-10 15:59
45101 Re:在不同的網站間分享session Millerlai 290 2003-12-10 16:12
45103 Re:在不同的網站間分享session Millerlai 273 2003-12-10 16:26
45926 Re:在不同的網站間分享session aladdin 3123 2003-12-08 15:25
45676 Re:在不同的網站間分享session ymshin 1194 2003-12-08 16:18
45788 Re:在不同的網站間分享session aladdin 2245 2003-12-08 17:42
45605 Re:在不同的網站間分享session ymshin 1375 2003-12-08 18:05
45167 Re:在不同的網站間分享session sdargon 0 2003-12-10 10:56
45308 Re:在不同的網站間分享session ymshin 1176 2003-12-10 11:17
45367 Re:在不同的網站間分享session aladdin 1268 2003-12-10 12:00
45166 Re:在不同的網站間分享session ymshin 283 2003-12-10 12:16
45288 Re:在不同的網站間分享session aladdin 1591 2003-12-10 13:39
45151 Re:在不同的網站間分享session ymshin 1403 2003-12-10 14:35
45387 Re:在不同的網站間分享session aladdin 5567 2003-12-10 15:21
45079 Re:在不同的網站間分享session Biologic 136 2003-12-10 15:31
45150 Re:在不同的網站間分享session aladdin 124 2003-12-10 15:44
44922 Re:在不同的網站間分享session Biologic 167 2003-12-10 20:15
45119 Re:在不同的網站間分享session ymshin 1076 2003-12-10 16:15
45117 Re:在不同的網站間分享session aladdin 1290 2003-12-10 16:45
45124 Re:在不同的網站間分享session ymshin 2038 2003-12-10 17:39
45034 Re:在不同的網站間分享session aladdin 545 2003-12-10 18:03
44949 Re:在不同的網站間分享session ymshin 218 2003-12-10 19:43
45219 Re:在不同的網站間分享session Biologic 1128 2003-12-10 12:52
45201 Re:在不同的網站間分享session aladdin 132 2003-12-10 12:56
45217 Re:在不同的網站間分享session anthonychen 232 2003-12-10 11:17
44975 Re:在不同的網站間分享session anthonychen 421 2003-12-10 19:58
45522 Re:在不同的網站間分享session jog 342 2003-12-09 01:57
45454 Re:在不同的網站間分享session Biologic 460 2003-12-09 10:28
45597 Re:在不同的網站間分享session aladdin 2955 2003-12-09 10:31
45595 Re:在不同的網站間分享session im1000 567 2003-12-10 04:26
45744 Re:在不同的網站間分享session aladdin 516 2003-12-10 11:11
» JWorld@TW »  Servlet/JSP 討論區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8