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

» JWorld@TW » Servlet/JSP 討論區  

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



版主

發文: 676
積分: 8
於 2003-12-07 01:36 user profilesend a private message to usersend email to Forthreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Session hijacking doesn't help. And there's no necessity to tie cookie with SSO.

Forth edited on 2003-12-07 01:39
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:Forth]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2003-12-07 12:25 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
Forth wrote:
Session hijacking doesn't help. And there's no necessity to tie cookie with SSO.


sure, i know it.

Now i have some thoughts about this question.

1) the Single Server SSO is more simple with only one webserver and they are developed in the same programming language. The apache webserver could catch cross-domain and dispatch them to the right domain webapps by handling session in the same webserver. There are some solutions in PHPs in Apache. Is it possible to modify some Tomcat source-codes for this problem or even use apache for identity server ?

2) Well, by servlet context , we could use the cross-context for different webapps transfer any session data, however, when in different domain situations, how could i do it ? My poor suggestion, can i use a NULL webapp is set for virtual host in the same webapps to invoke the real URL, it depends on all webapps are developed in *ONE* company. not include other companies' webapps.

3) When Loginng AAA.com to login all domain. All domain server will send the sessionID to client's browser, and we handle the sessionID in a server, when one domain server sessionId is access by client, it should trigger other domain sessionId to sync-like action for session living. I don't know that it is possible or impossible !!

4) Just use the GET parameters with following URL, however, i feel this is a so bad solution.

5) To use commerical "Identity Server" ex. SunOne , Novell, they create a Identity Provider for federation, and Service Provider in cross domain will catch the session variable by webservice in SAML . I think that it's a best solution with the safe security .


reply to postreply to post
作者 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
作者 Re:在不同的網站間分享session [Re:aladdin]
Biologic

生物學下的產物



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


不好意思... 看了這麼多, 我是越看越模糊....
不好意思問個問題:
1. 怎麼不做個 identity server? 可以利用 ldap server.
2. 怎麼不在每個 redirect url 都把 identity server (active) user ID 加上去.
3. 我建議外加使用 SSL.

反正只要在 request 裡面沒有 user id, 就強迫user login(如果 user 沒有 login 的話). 如果有的話則去 i server 去查看有效性.

避免被 clone, 可以外加 validation code. validation code 每次只可以用一次, 用完就修改.


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-08 15:25 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
ymshin wrote:
well, 要一個個糾正很頭痛, 先直接點出些觀念錯誤的部分;


well, 這裡沒有什麼觀念錯誤的問題,你大概被前後的討論搞得有點失去焦點。Big Smile


1. from MSDN library,
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpriv/html/ie6privacyfeature.asp
First- and Third-Party Context

所謂的 third party cookie 和 js 一點關係都沒有. 先前的網站是和作流量統計低合作, 你想知道這種如何運行可以先去申請一個免費的試試就知道.



本來就沒有關係啊!今天不論他傳回的是個.js還是個.gif,third party cookie都會跟著來阿!我以為之前已經說清楚了。問題是,怎麼達成這種效果?透過servlet嗎?還是一定得要透過Filter?(當然Filter只是一個設定和寫法不太一樣的servlet)


2. domain 不是依照 xxx.xxx.xxx.com 區分, 是依照你低網站位址.


你上面舉的例子,如果 www.wideworldimporters.comwww.wingtiptoys.com 住在同一個IP位址就不算是third-party cookie了嗎?如果你的答案是「yes」,那你最好再去msdn找找資料。


3. header is used for offering extra information, 跟 cookie 也沒有直接關係, 只是可以利用來設定 cookie text file 可存的內容(如果 browser 支援 cookie 的話), 此外, browsers 對 cookie 的行為並不一致, 不一定都會 support, 除非你的 target 是特定 browser & version, 再說, client side 也不一定 support. 大廠大公司開始 ban 一些 Ads' cookie, 例如 IBM; 為什麼咧? privacy issue. http://www.cookiecentral.com/faq/#2.6
這網上隨便找一堆, 相信有其他詳細資訊可搜尋. 你想問的是那種與廣告公司不經當事人同意目前還算合法的 cookie 存取行為, 事實上現階段是不太好的作法; 如果不是 a 網站主動提供資料, b 網站即使在 a 網站有連結 fetch user basic info., 它能得到的資訊也是有限, cookie 是直接和 client site 溝通, 不會互相 send info. back and forth~


你的問題分成幾個部分。

1. 「header還有很多資訊」,那沒有錯,可是除了cookie之外,沒有什麼共通的標準可供session tracking。
2. browser對cookie的行為,是一致的。你可以ban掉某些cookie或是全部的cookie,但一旦選擇接收cookie,cookie都是透過w3c所提供的API在implement。請直接至W3C查cookie。
3. 關於透過third-party cookie存取資料。如果aaa.com向counter.com要了一個圖,圖上卻attached了一個cookie,應該嗎?也許應該,也許不應該。但是,在現階段的標準作法是:在網站的privacy policy講清楚這件事。至於我們需要的多個網站間的single sign on,網友可以同意,也可以不同意。即使沒有cookie,我還是可以透過url rewriting去辨識session。只要能辨識session,我最早說的那個login流程就能派上用場。


4. session 的英文意思是會談, 應用在電腦, 如果是 client/server 機制通常是指單一 client 與 server 間的 interaction, 不同技術有不同作法, 當然沒有所謂的 standard 說法. java 的 httpsession 作法不一定要使用 cookie 機制才能對個別使用者作 tracking, 詳情請參閱各大 servlet programming 書籍.


在最早的電腦術語裡,session是「工作階段」。上過VAX或是Cyber這種老機器的人應該都知道這個詞才對。Big Smile

另外,我花了一個晚上寫了半天,不就是為了告訴大家:cookie和session沒有必然的關係!先分清楚這兩者,研究為什麼會選擇使用cookie來做session tracking,才有辦法對網站共享session必須的過程有個清楚的認識。是我的文筆不好嗎?Black Eye


cookie 的做法在同一個 domain 又 client-side support 的前提下使用是很好啦, 可是沒有特定的 target 又想在兩個網站間傳個人資料用 cookie 的方式擷取是不可能的, 除非你另外提供資訊給 b 網站(不要懷疑, 請查閱 cookie 的基本運作方式, 如果不同 domain 都可以隨意擷取其他網站留在 cookie text file 的使用者資訊還得了!); 要用 cookie 的話技術根本不是問題, 你沒看廣告 banner 一堆? 可是為什麼人家一般商業網站不用這種簡單方便的方法還要有其他機制找麻煩咧? 請先思考一下, 這還有法律問題層面低爭議咧. 如果確定兩個網站 server-side 作法(怎麼寫的), 還不如將使用者資訊包一包, 加密丟過去讓對方認, 這個實際作法可簡單(陽春)也有可能會非常複雜難寫, 看功能需求. (一般網站和刷卡公司的合作不就是用包低?)

5. 其他部分我直接跳過, 請直接翻閱相關書籍比較快也清楚.


我想,我上面有些事情沒有寫清楚。情況是:假設今天aaa.com與bbb.com都在同一個網站上。假定某甲已經在aaa.com用了identity server進行身份認證。某甲進到bbb.com,而bbb.com與aaa.com是使用同一個identity server。在這種情況下,需要什麼動作,才可以知道某甲已經在aaa.com登入了?

透過對cookie機制的分析,對session機制的分析,上面的問題轉變成是:當某甲在bbb.com的時候,不去aaa.com轉一圈,我會知道某甲已經在aaa.com登入了嗎?之所以不行的理由在哪裡?分析完這件事,你就會發現:identity server或許有別的重要功能(autorization),但是在跨網域之間進行authentication,絕對不是如有些人相信的:有identity server就可以了。

我想,我的文筆,真的不太好。Black Eye


browser edited on 2003-12-08 15:30
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
ymshin





發文: 277
積分: 4
於 2003-12-08 16:18 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
well, 我說的觀念是 cookie 概念完全錯誤, 它不會隨圖像被 attached 進去, 而是由於你嵌進的 frame or import 的 gif 網站, 如果對方有設定 cookie, 自然會有所謂的 third party cookie 出現, 我不知道是否是溝通有誤, 但是那種敘述方式讓我覺得完全背離 cookie 實際上的做法原理, 而你卻一直強調是將 cookie 引進去, 所以我覺得是基本觀念有誤, 根本就不用 filter 和一些技術啊, 根本不用效果. 你如果確定知道 third-party cookie 怎麼回事, 寫一個網頁將另一個網站有設 cookie的用frame 把它偷進去, 自然就知道是怎麼來的.

domain 和 ip address 本來就是兩碼子事, 這不是 MSDN 的範疇吧? 例子不是我寫的, 所以引言, 因為你之前給的訊息我怎麼看都很奇怪, 這裡人家說的 domain 不是你說的方法分, 請先看清楚.

又, 我只知道 term 在不同地方的用法定義不同, 你給的訊息並不很正確, 如果是針對 java 而言, 不同的 session 觀念一樣, 要作的事不盡相同,沒有一定非要作的事, 完全是看在哪一種 interaction 的需求, 再說, java 中的 session 處理方式與你所說的方式也不太一樣, 不太清楚為何差這麼多.

有標準的 cookie 寫法, 但是對 browsers 來說並不一定採用, 採取的手段也不一致, 反應的行為不一, 與 W3C 給的 spec 是兩回事, 不能一概而論. 你先前的說法有問題, cookie 是透過 http protocol 與 client side 溝通, 但是 header 絕對不可能有權利指定 cookie, 那是 statless protocol, 可以的話未免太恐怖了吧?

作服務不能有預設立場, 如果今天你要假設你的東西用 cookie 大家都能接受使用沒問題, 但討論前提是說清楚, 而不是提出來作 general discussion, 自然會有像我這種意見出現. 至於 cookie 的說法, 既然你作過那麼多調查, 應該知道它還有其他的安全顧慮, 我就不贅述了, 這是您的選擇.

不是 SSO or identity 有無必要性的爭論, 而是提出的方法敘述例如 cookie 與 session 的使用方式和原理與我所認知的大多背離, 所以我覺得觀念有誤, 如果不嫌棄, 請將您引用的資訊來源分享給大家學習, 我也將一些 cookie 101 links 找出來貼出, 看看為何會有落差. 至於, http session, orelly 那本應該就寫的夠清楚了, 不夠我再去找資料佐證. ^^


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:ymshin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-08 17:42 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
ymshin wrote:
well, 我說的觀念是 cookie 概念完全錯誤, 它不會隨圖像被 attached 進去, 而是由於你嵌進的 frame or import 的 gif 網站, 如果對方有設定 cookie, 自然會有所謂的 third party cookie 出現, 我不知道是否是溝通有誤, 但是那種敘述方式讓我覺得完全背離 cookie 實際上的做法原理, 而你卻一直強調是將 cookie 引進去, 所以我覺得是基本觀念有誤, 根本就不用 filter 和一些技術啊, 根本不用效果. 你如果確定知道 third-party cookie 怎麼回事, 寫一個網頁將另一個網站有設 cookie的用frame 把它偷進去, 自然就知道是怎麼來的.


神奇的地方就是:這些網頁都沒有frame,也沒有iframe,那這個third party cookie是怎麼來的?

Third party cookie的問題在於:為什麼我只是include了一個來自另一個domain的.js, .gif, .jpg, cookie就跟著來了?以我們現在所知道的技術,要怎麼做這件事?

domain 和 ip address 本來就是兩碼子事, 這不是 MSDN 的範疇吧? 例子不是我寫的, 所以引言, 因為你之前給的訊息我怎麼看都很奇怪, 這裡人家說的 domain 不是你說的方法分, 請先看清楚.

又, 我只知道 term 在不同地方的用法定義不同, 你給的訊息並不很正確, 如果是針對 java 而言, 不同的 session 觀念一樣, 要作的事不盡相同,沒有一定非要作的事, 完全是看在哪一種 interaction 的需求, 再說, java 中的 session 處理方式與你所說的方式也不太一樣, 不太清楚為何差這麼多.

有標準的 cookie 寫法, 但是對 browsers 來說並不一定採用, 採取的手段也不一致, 反應的行為不一, 與 W3C 給的 spec 是兩回事, 不能一概而論. 你先前的說法有問題, cookie 是透過 http protocol 與 client side 溝通, 但是 header 絕對不可能有權利指定 cookie, 那是 statless protocol, 可以的話未免太恐怖了吧?


但是cookie的確就住在http request header裡。這個部分連你給的網址裡的3.2都說了這件事,還有直接相關的RFC連結,標題就叫做:HTTP State Management Mechanism。

http://www.cookiecentral.com/faq/#3.2

什麼叫做http是stateless的protocol?我發現大家說這句話的時候,都不求甚解。什麼叫做stateless?是說,大家沒有建立一個通用的standard去分辨這個http request的狀態。但是並不表示個別的solution是不存在的。你可以用cookie達成你要的功能,只是在標準中,沒有要求「如果有人這樣這樣...那就該這樣這樣處理」。在網際網路的世界裡,通用而便利的東西最後總是贏家。cookie雖然不是W3C的標準,但是連W3C都推出建議的API,就知道這東西多麼有威力了。


作服務不能有預設立場, 如果今天你要假設你的東西用 cookie 大家都能接受使用沒問題, 但討論前提是說清楚, 而不是提出來作 general discussion, 自然會有像我這種意見出現. 至於 cookie 的說法, 既然你作過那麼多調查, 應該知道它還有其他的安全顧慮, 我就不贅述了, 這是您的選擇.

不是 SSO or identity 有無必要性的爭論, 而是提出的方法敘述例如 cookie 與 session 的使用方式和原理與我所認知的大多背離, 所以我覺得觀念有誤, 如果不嫌棄, 請將您引用的資訊來源分享給大家學習, 我也將一些 cookie 101 links 找出來貼出, 看看為何會有落差. 至於, http session, orelly 那本應該就寫的夠清楚了, 不夠我再去找資料佐證. ^^


我倒是要謝謝小魚兒給的這個連結,之前我在w3c上面沒有找到cookie的相關 recommendation,但是這篇文章給的RFC連結,已經非常清楚的解釋了cookie在user agent(也就是browser)的處理方式。寫程式的人可以選擇不遵循RFC,而另立標準。但是在cookie這個例子裡,顯然大家都很乖。

另外,session與cookie之間的關係,我本來是自己亂想的。(思考的時候,我喜歡從第零定律開始,把什麼相關什麼不相關先分開來。這是在數學系養成的壞習慣)但是今天一早實作tomcat filter時,把Tomcat kick start中的第八章複習了一遍(特別是136頁開始關於cookie與session的關係),確定自己沒有說錯才 post 上來。倒是我自己重讀以後,覺得有些地方可能會造成誤解。晚上有空我會重新再修一遍。


aladdin edited on 2003-12-08 18:16
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
ymshin





發文: 277
積分: 4
於 2003-12-08 18:05 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
aladdin wrote:
神奇的地方就是:這些網頁都沒有frame,也沒有iframe,那這個third party cookie是怎麼來的?

Third party cookie的問題在於:為什麼我只是include了一個來自另一個domain的.js, .gif, .jpg, cookie就跟著來了?

不只是 frame 才會有這種情形, 所以我才會想確定您知道 third-party cookie 如何產生定義的. 至於產生的 cookie 那個網站和大多嵌進廣告 banner 一樣, 關鍵都在於圖形的 import, 我想這找一下資訊應該很多.
^^


什麼叫做http是stateless的protocol?我發現大家說這句話的時候,都不求甚解。什麼叫做stateless?是說,大家沒有建立一個通用的standard去分辨這個http request的狀態。但是並不表示個別的solution是不存在的。在網際網路的世界裡,通用而便利的東西最後總是贏家。cookie雖然不是W3C的標準,但是連W3C都推出建議的API,就知道這東西多麼有威力了。


上面離題了. 我想 header 的運用作 web service 的大家都不陌生, 你可以丟資料給它讓它傳送, 但是它不會處理, 只負責傳送, 要接收端的程式判斷資料運作才行. 寫 Java 的 stateless 觀念在 bean 上也有運用, 要說不求甚解我倒是蠻保留意見低. 沒有人利用 header 嗎? 大家都在用. 但是 header 可以自己指定判斷 cookie? well~


我倒是要謝謝小魚兒給的這個連結,之前我在w3c上面沒有找到cookie的相關 recommendation,但是這篇文章給的RFC連結,已經非常清楚的解釋了cookie在user agent(也就是browser)的處理方式。寫程式的人可以選擇不遵循RFC,而另立標準。但是在cookie這個例子裡,顯然大家都很乖。

其實這類 FAQ 很多, 我只是 po 基本觀念的連結,不是大家乖不乖的問題, 這種方式的 cookie 也有正當運用; 你如果想找關於廣告 banner 那種與 javascript 配合的技巧說明, 也是很多的, 有興趣到處挖挖看看就知道了.
^^


另外,session與cookie之間的關係,我本來是自己亂想的。(思考的時候,我喜歡從第零定律開始,把什麼相關什麼不相關先分開來。這是在數學系養成的壞習慣)但是今天一早實作tomcat filter時,把Tomcat kick start中的第八章複習了一遍(特別是136頁開始關於cookie與session的關係),確定自己沒有說錯才 post 上來。倒是我自己重讀以後,覺得有些地方可能會造成誤解。晚上有空我會重新再修一遍。


與其看 container 怎麼處理, 不如看如何使用; 如果對 java 不熟直接看的話很多觀念不熟容易造成誤解的, 我是降覺得啦, 要弄懂可能花的時間會較久一點.


ymshin edited on 2003-12-08 18:10
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
jog

Solaris 才是王道阿!!



發文: 76
積分: 3
於 2003-12-09 01:57 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
把登入(物件)狀態紀錄在 LDAP 可行嗎?
看來大家都在 Session 維持上面打轉
姑且不論 LDAP 中的結構怎麼設計
只是提出一些想法

AAA.com            BBB.com
  |                |
AAA_LDAP <=====Sync=====>BBB_LDAP

當 User 從 AAA.com 跑到 BBB.com
把 OID 帶到 BBB.com
再把 LDAP 中字串資料帶出來, construct Object

不過這樣做.... Update LDAP 的次數將 "相當" 頻繁阿!


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:jog]
Biologic

生物學下的產物



發文: 524
積分: 4
於 2003-12-09 10:28 user profilesend a private message to usersend email to Biologicreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
jog wrote:
把登入(物件)狀態紀錄在 LDAP 可行嗎?
看來大家都在 Session 維持上面打轉
姑且不論 LDAP 中的結構怎麼設計
只是提出一些想法

AAA.com            BBB.com
  |                |
AAA_LDAP <=====Sync=====>BBB_LDAP

當 User 從 AAA.com 跑到 BBB.com
把 OID 帶到 BBB.com
再把 LDAP 中字串資料帶出來, construct Object

不過這樣做.... Update LDAP 的次數將 "相當" 頻繁阿!


應該只有一個 ldap. 如果你要很多個 ldap server ... 是也可以啦...
且... 請問為什麼 update LDAP 的次數會很頻繁?


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-09 10:31 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package sams.filters;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class PageHitCountFilter implements Filter
{
  private FilterConfig filterConfig=null;
  public void init(FilterConfig filterConfig) throws ServletException
  {
    this.filterConfig=filterConfig;
  }
  public void destroy()
  {
    this.filterConfig=null;
  }
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException 
  {
    if (filterConfig==null) throw new ServletException();
 
    ServletContext context=filterConfig.getServletContext();
    if(request instanceof HttpServletRequest)
    {
      HttpServletRequest httpReq=((HttpServletRequest) request);
      // insert the session here
      HttpSession session=httpReq.getSession();
      // end of session insertion
      HashMap hitCountMap=(HashMap) context.getAttribute("hitCounts");
      if(hitCountMap==null)
      {
        context.setAttribute("hitCounts", hitCountMap=new HashMap());
      }
      String servletName=httpReq.getServletPath();
      Integer hits=(Integer) hitCountMap.get(servletName);
      if(hits==null) hits=new Integer(1);
      else hits = new Integer(hits.intValue()+1);
      hitCountMap.put(servletName, hits);
      context.setAttribute("hitCounts", hitCountMap);
    }
    if(response instanceof HttpServletResponse)
    {
      HttpServletResponse httpRes=((HttpServletResponse) response);
      // attach the cookie
      Cookie c=new Cookie("hello","hash");
      httpRes.addCookie(c);
      // end of cookie attached
    }
    chain.doFilter(request, response);
  }
}
 


這是從Tomcat kick start 第18章抄出來的filter例子。透過這樣的方式,很簡單就可以attach cookie,甚至session。

你可以把上面的filter裝在某一個網域的tomcat 4.1(其他版本我不曉得)上,然後在任何一個其他網域上reference這個filter所在path的任何內容(.js, .gif, .jpg),並開啟third party cookie的警告功能,再到tomcat 4.1網域上製作任何跟session有關的功能。這個例子稍加改進,就可以做session sync了。


aladdin edited on 2003-12-09 11:25
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
im1000



版主

發文: 149
積分: 7
於 2003-12-10 04:26 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

這是從Tomcat kick start 第18章抄出來的filter例子。透過這樣的方式,很簡單就可以attach cookie,甚至session。

你可以把上面的filter裝在某一個網域的tomcat 4.1(其他版本我不曉得)上,然後在任何一個其他網域上reference這個filter所在path的任何內容(.js, .gif, .jpg),並開啟third party cookie的警告功能,再到tomcat 4.1網域上製作任何跟session有關的功能。這個例子稍加改進,就可以做session sync了。


sorry about this..
how to make session sync ?!

And i got some confused.. what is the session sync ?

Is "session sync" a session data sharing across domain?
or is "session sync" a session creating in different domain?
or is "session sync" a session Id synconization ?


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:ymshin]
sdargon





發文: 109
積分: 0
於 2003-12-10 10:56 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
Post is deleted

sdargon edited on 2003-12-10 11:38
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:im1000]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 11:11 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
im1000 wrote:
sorry about this..
how to make session sync ?!

And i got some confused.. what is the session sync ?

Is "session sync" a session data sharing across domain?
or is "session sync" a session creating in different domain?
or is "session sync" a session Id synconization ?


the last one.

使用上面所說的技術,拿到每個網域的session id,存在共通的資料庫。然後用前面說的方法去辨識不同網域session的id,然後在一個外部的data repository(如SQL資料庫)儲存session的內容。這樣,就可以確保每個網域,都能知道該使用者在不同的網域曾做過什麼事。

這部分需要一點時間整理說明,只是現在被人追殺Black Eye,可能要等幾天。


aladdin edited on 2003-12-10 11:27
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:sdargon]
ymshin





發文: 277
積分: 4
於 2003-12-10 11:17 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
sdargon wrote:
在此貼上一段連到某個站後所傳回來的header
1
2
3
4
5
6
7
8
9
10
GET /Default.asp
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 10 Dec 2003 02:19:46 GMT
X-Powered-By: ASP.NET
Connection: Keep-Alive
Content-Length: 52557
Content-Type: text/html
Set-Cookie: ASPSESSIONIDCCQQSCSD=HCHPDNCAEENJAFLELALJLMGI; path=/ 
Cache-control: private

而它的script裡並沒有指定cookie的地方
由此可知...header可以指定cookie

覺得這句話太過抬舉java了
在網頁程式設計裡
熟java是沒有太大用處的
要熟的話...
應該是要去熟http及網頁裡的script才對
這樣子才真的不會造成觀念的誤解
(熟http最好的方法是用telnet去連結網頁)


well, 可能您不太清楚 header 是 http protocol 的一部分, 定出部分共同標準後不同技術對於使用方式有自己的語言設定, cookie 也不是 header 一定得做的設定值, 和特定的 script 語言沒有直接關係, 如果把 http protocol 窄化在網頁設計也未免太糟蹋它的實際運用廣度吧? 又, java 是 programming language, 寫 java networking 的不可能不熟 http protocol, 好像這個 protocol 不是網頁開發專用的吧? 如果作 web service 的不清楚 http protocol, java 在這方面沒用處, 今天中大型企業注重 secure 的 web service project 會使用 java 為可行方案嗎? 抱歉, 離題了些, 只是覺得邏輯有點怪怪的. 又, telnet 是用 http protocol? well~

如果您仔細看文的話應不難發現這部分我所針對的是先前留言有關大家對 stateless protocol "stateless" 一詞的誤解主觀評斷有所微詞, 這裡的言論和 http protocol or java 或任何其他 pl 都沒有直接關聯, 說人不懂 stateless 真義我覺得不太恰當, 這裡是 java forum 當然是以 java 中的觀念應用作例子, 有不適合不合理之處嗎? 煩請指教一二.


ymshin edited on 2003-12-10 11:48
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:sdargon]
anthonychen

外線交給我

版主

發文: 2033
積分: 8
於 2003-12-10 11:17 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
sdargon wrote:
前略...

覺得這句話太過抬舉java了
在網頁程式設計裡
熟java是沒有太大用處的
要熟的話...
應該是要去熟http及網頁裡的script才對
這樣子才真的不會造成觀念的誤解
(熟http最好的方法是用telnet去連結網頁)


我想ymshin指的*要熟悉Java*指的是*看Container(Tomcat)運作模式*這件事吧,你可能誤解他的意思了。


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:ymshin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 12:00 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
ymshin wrote:
如果您仔細看文的話應不難發現這部分我所針對的是先前留言有關大家對 stateless protocol "stateless" 一詞的誤解主觀評斷有所微詞, 這裡的言論和 http protocol or java 或任何其他 pl 都沒有直接關聯, 說人不懂 stateless 真義我覺得不太恰當, 這裡是 java forum 當然是以 java 中的觀念應用作例子, 有不適合不合理之處嗎? 煩請指教一二.


恩...可能我和小魚兒的對話,讓其他人看得誤殺殺。

其實,即便把cookie算進去,http 這個protocol在本質上應該還算是stateless的。這牽涉到什麼叫做「stateless」的定義。小魚兒雖然一開始沒有弄清楚,cookie的確是在http header定義的,是http protocol的一部份,但是stateless這件事,他是對的。

http server做protocal 層面的 response時,會不會因為你在http request中所做的任何設定有所不同?答案是:不會的。但是透過這樣一個stateless protocol,你還是可以在上面建構你自己的solution,只是這些資料,都不在http傳來傳去的header裡面。

我接下來的講法其實並不精確,不過現在也只能這樣了。

browser今天送出一個http request,包含兩部份:一部份是http header,一部份是URI的設定。同樣的,http server返回一個http response,也包含兩個部分:一部份是http header,一部份是真正的內容(可能是個html,一個.js,一個.gif或是任何東西)。http server如何反應一個http request?protocol層面,他只管http header裡面給他的東西,然後把第二部分東西收進來。後端有個處理的黑盒子,根據傳來的第二部分處理處理後,把真正的內容交給http server,http server加了一個header以後就傳回給browser端。http server 在加這個header的時候,連「寄到哪裡」這些必備的資訊,都是第二部份的內容告訴他的;對http request給他的任何資訊,都是no comment(也就是當作不知道)。這樣的好處,當然是因為實作上很簡單。

cookie算不算破壞了這點?答案是no。http browser當然根據RFC 2109,每次遞交http request時,都會把cookie放進去,但是response時,根據RFC 2109,就算第二部分(也就是真正的內容)要求http server添加cookie(Set-Cookie),http server還是不「記得」原來的http request長什麼樣。

有興趣的人,還是去看http的spec吧!


aladdin edited on 2003-12-10 12:05
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
ymshin





發文: 277
積分: 4
於 2003-12-10 12: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
aladdin wrote:
小魚兒雖然一開始沒有弄清楚,cookie的確是在http header定義的,是http protocol的一部份,但是stateless這件事,他是對的。

其它部分均跳過略


呵, 不好意思, 我不清楚我是哪部分沒弄清楚, 可以請您提出來好嗎? 似乎我先前沒有對 cookie 是在哪設的值作應對吧? 而且回文的重點也不在那不是? 這樣的爭議有點無聊也不像討論, 反倒是口水戰, 如果沒有具體敘述能指出我犯的過錯, 那麼就此打住吧, 轉回原題, 不然就成了灌水文.
^^


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
Biologic

生物學下的產物



發文: 524
積分: 4
於 2003-12-10 12:52 user profilesend a private message to usersend email to Biologicreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
aladdin wrote:
恩...可能我和小魚兒的對話,讓其他人看得誤殺殺。

其實,即便把cookie算進去,http 這個protocol在本質上應該還算是stateless的。這牽涉到什麼叫做「stateless」的定義。小魚兒雖然一開始沒有弄清楚,cookie的確是在http header定義的,是http protocol的一部份,但是stateless這件事,他是對的。

http server做protocal 層面的 response時,會不會因為你在http request中所做的任何設定有所不同?答案是:不會的。但是透過這樣一個stateless protocol,你還是可以在上面建構你自己的solution,只是這些資料,都不在http傳來傳去的header裡面。

我接下來的講法其實並不精確,不過現在也只能這樣了。

browser今天送出一個http request,包含兩部份:一部份是http header,一部份是URI的設定。同樣的,http server返回一個http response,也包含兩個部分:一部份是http header,一部份是真正的內容(可能是個html,一個.js,一個.gif或是任何東西)。http server如何反應一個http request?protocol層面,他只管http header裡面給他的東西,然後把第二部分東西收進來。後端有個處理的黑盒子,根據傳來的第二部分處理處理後,把真正的內容交給http server,http server加了一個header以後就傳回給browser端。http server 在加這個header的時候,連「寄到哪裡」這些必備的資訊,都是第二部份的內容告訴他的;對http request給他的任何資訊,都是no comment(也就是當作不知道)。這樣的好處,當然是因為實作上很簡單。

cookie算不算破壞了這點?答案是no。http browser當然根據RFC 2109,每次遞交http request時,都會把cookie放進去,但是response時,根據RFC 2109,就算第二部分(也就是真正的內容)要求http server添加cookie(Set-Cookie),http server還是不「記得」原來的http request長什麼樣。

有興趣的人,還是去看http的spec吧!

我在想 keep-alive 可不可以做到 stateful?
(不過當你按下 stop 的時候 connection 就斷了...)


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:Biologic]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 12:56 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
Biologic wrote:
我在想 keep-alive 可不可以做到 stateful?
(不過當你按下 stop 的時候 connection 就斷了...)


不行!keep-alive不是這意思。


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:ymshin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 13:39 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
ymshin wrote:
呵, 不好意思, 我不清楚我是哪部分沒弄清楚, 可以請您提出來好嗎? 似乎我先前沒有對 cookie 是在哪設的值作應對吧? 而且回文的重點也不在那不是? 這樣的爭議有點無聊也不像討論, 反倒是口水戰, 如果沒有具體敘述能指出我犯的過錯, 那麼就此打住吧, 轉回原題, 不然就成了灌水文.
^^


我也感覺像是口水戰了。

在我的認知裡:我試著解釋為什麼cookie會跟session扯上關係(目的是為了要瞭解還有哪些alternative,釐清共享session是不是和現有的protocol有所抵觸),然後你告訴我說我對cookie和session的認識是錯的。但我不知道錯在哪裡阿!

我或許思考的方式跟大家不太一樣:先思考在server這一端,session是如何在不同的http request之間共用的,你會發現session id是需要 browser端給你,才有辦法做session tracking。那為何大家都用cookie傳遞session id?當然是因為cookie具有某種特性,當時雖然不知道RFC 2109這個東西,但是看完以後,發現跟我所描述的cookie行為一樣阿!而且cookie的確就是http header的一部份。我說錯的部分,是以為每次的http response,也會重複cookie,但其實不會,只有加添新的cookie時會出現。如果沒有cookie可用時,URL rewriting也只做一件事,傳遞session id。還有third party cookie的描述,我也是對的。

至於我描述的session實作要考慮的問題,當然也都存在阿!如果今天我們得自己implement HttpSession這個interface,那些得做的事情一件沒少阿!這點,已經在很多書上確認過了(比如tomcat kick start第八章,就解釋了為什麼有三種session tracking的作法)。我的問題在於,能不能用servlet這個階層解決這些問題?就像jini說的,他的想法是去intercept HTTP req/rep。這點,就是filter的功能。但是在servlet這個階層,很多東西你是改起來很頭大的(比如我就不知道怎麼在tomcat中overide HttpServletRequest.getSession()這個東西。就算你可以繼承另外實作 HttpServletRequest,但JSP怎麼辦)。

另外,即便有identity server,也不表示多網域之間的session tracking(目的是確認該使用者的身份),就可以painless的完成。連Jini都懷疑,在aaa.com SSO過以後,如果該網友直接在地址列打入bbb.com,不見得bbb.com知道該網友已經在aaa.com登入成功(有沒有identity server都一樣)。這種時候,third-party cookie這種技術,當然就值得探討了。third-party cookie,透過filter實作,在j2ee的架構下,算是標準配備(連session都能產生)。但是在IIS的ASP平台,這個東西可得自己寫ISAPI Filter(只能用C++)解決,雖然也沒多難,但總不是個大家都知道的作法!

到了這個地步,session共享這個問題,我自己覺得,「每個網域還是有自己的session,但是可以透過一套機制做sync,而不會在各個網域間造成太大的麻煩」,在技術面上會比較cost-effective。當然Jini大大(大大不愧是大大)所思考的就更深入了。

一個中午沒吃飯寫這個東西,肚子餓......Sad


aladdin edited on 2003-12-10 14:06
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
ymshin





發文: 277
積分: 4
於 2003-12-10 14:35 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
aladdin wrote:
我也感覺像是口水戰了。

在我的認知裡:我試著解釋為什麼cookie會跟session扯上關係(目的是為了要瞭解還有哪些alternative,釐清共享session是不是和現有的protocol有所抵觸),然後你告訴我說我對cookie和session的認識是錯的。但我不知道錯在哪裡阿!




我不是一開始就說了觀念完全不對嗎? cookie 是一種出現較早的方法, session 是另外一種機制, 根本就扯不上關係, 你可以合併運用, 但兩者還是兩碼子事, 是獨立個體. 運作方式更不用提, 所以才想請教您是打哪看來的資訊,我很不清楚為什麼你會認為你所說的是它的運作方式; 既然你如此確定您的解讀無誤, 可否將資料引述原文部分提供出來讓我們學習呢?

我簡單說好了, cookie 是藉由在 header 設定值的方法, 由懂得訊息的 client side 收取後判斷處理的值, 和其他 header 裡的東西都一樣, 只是大部分的 modern browser 都能夠藉由 spec 規定的標準寫法抓取 cookie 值存入一個 text file, 然後 client-side 利用 http protocol 和 server 作 1-1 的 interaction, 根本就和一些 script or pl 沒有關係, http server 的作法是如何截取相信您既然在研讀 container 書籍應該有所心得. 何謂 third-party cookie? 那是 browser 幫你作的判斷, 根本沒有技術問題, 不過是個名稱定義, 如果有空回頭看一下 MSDN 的連結, 裡面說的一清二處, 不滿意還有其他資訊等你抓抓樂.

其餘我不想爭辯, java 的 session id 是由 browser 給的?! 如果您是從書上得到的資訊也請您引言, 實在是覺得很不可思議. session 是用 cookie 傳送 session id?!!! well~

這些都是技術層面, 有一定的原理作法, 不是 corollary 作推導沙盤演算, 是否您在反駁先前與您討論的網友並作出結論前應該先確定提供資訊的正確性而不是直接將自身的推斷用肯定直述句寫出來教導人(如果是我誤會很抱歉)? 每個人都有可能犯錯, 但是否定人家前也得先確定自己沒有解讀錯資料不是? 否則也把資料引述部分提供讓其他網友作判別評估, 如果有解讀錯誤也有人可幫你釐清觀點. 不是你提出的這些問題存不存在的問題, 這絕對不是您才會遇到的情況, 不是第一個, 也不會是最後一位, 台灣不是軟體發展頂尖地區, 為什麼其他地方不採用您所想的一些方法呢? 因為人家比較愚昧嗎? 這就是需要深入分析學習的部分, 不是光看 spec. 就可得到解答. spec 多是提供標準行為, 實際運作是看你採用方法語言技術, 這就不是旁人幫得了忙的地方. 不過我會建議您不要執著在 filter 上面, 好像有點想歪 filter 的功能作用了.

不過, 說了半天, 我還是不了解你說我沒弄清楚的是哪部分, 又離題了一次. 如果板主會瀏覽這些 po 低話, 先說聲抱歉, 覺得扯太遠我低 po 就隨您看著辦吧.


ymshin edited on 2003-12-10 14:52
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:ymshin]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 15:21 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
ymshin wrote:
其餘我不想爭辯, java 的 session id 是由 browser 給的?! 如果您是從書上得到的資訊也請您引言, 實在是覺得很不可思議. session 是用 cookie 傳送 session id?!!! well~


請告訴我,沒有cookie,如何讓server這一端在不同的http request之間使用同一個session的資料?

指引你一條簡單的路:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnasp/html/aspwsm.asp
一篇1997的文章。

另一篇
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnduwon/html/d5sessmgmt.asp

裡面有一段文字

Cookies
A cookie is a piece of information stored on the client on behalf of the server. A cookie can contain all the session information, or just the session ID. The information stored in the cookie originates on the server, and is returned to the client as part of the server's response to an HTTP request. The browser packages the cookie with every HTTP request to the server and gets the cookie as the HTTP response from the server.

Because the browser attaches the cookie with each new HTTP header request before sending it to the server, cookies are an ideal way to identify a series of HTTP requests that come from the same user. When a request is received, the session ID is extracted and the user is identified. When a request is received with no cookie, or with a cookie that does not contain the unique identifier, the request is assumed to be from a new user. In that case, a new unique identifier is generated before the response is sent back to the client.

The disadvantages of maintaining session state with cookies include the security and size limitations presented. The maximum allowable size of a cookie is 4,096 bytes. Because the cookie is stored in a known location, the information stored in the cookie is not secure and can potentially be sniffed. Though cookies impose a security risk for sensitive information, they can be used for storing non-sensitive information. Another problem with cookies is that not all browsers support them, and some browsers that do support cookies allow users to disable them. If your application needs to be responsive to browsers that don't support cookies or to browsers with cookies disabled, you should consider other session management techniques.


知道了嗎?HttpServletRequest.getSession()在做什麼?

這裡還有:
http://java.sun.com/blueprints/qanda/web_tier/session_state.html

How does the web tier maintain session state?

A web container provides session management to the JSP pages and servlets it contains by way of interface HttpSession. Typically, the container will try to use a cookie to save user session state on the client. If the client refuses to accept the cookie for some reason (the user has disabled cookies, an intervening firewall filters cookies, etc.), the container will usually try to implement session management by using URL rewriting. URL rewriting works in cases where cookies will not, even in browsers that don't implement cookies, but suffer from other problems. Rewritten URLs tend to be long and ugly, are expensive to produce for pages with many links, and usually don't "bookmark" well. Furthermore, rewritten URLs usually can't be used with legacy web pages, because the URLs in the links in those pages are static.

In general, it's preferable to save custom session state in the HttpSession object itself, using its methods getAttribute() and setAttribute(). Using these methods allows the web container to maintain that session state in a way most effective for your particular application and server.


這一切的源頭,RFC 2109,有如下的一段文字:

4. OUTLINE

We outline here a way for an origin server to send state information
to the user agent, and for the user agent to return the state
information to the origin server. The goal is to have a minimal
impact on HTTP and user agents. Only origin servers that need to
maintain sessions would suffer any significant impact, and that
impact can largely be confined to Common Gateway Interface (CGI)
programs, unless the server provides more sophisticated state
management support. (See Implementation Considerations, below.)

4.2 Origin Server Role

4.2.1 General

The origin server initiates a session, if it so desires. (Note that
"session" here does not refer to a persistent network connection but
to a logical session created from HTTP requests and responses. The
presence or absence of a persistent connection should have no effect
on the use of cookie-derived sessions). To initiate a session, the
origin server returns an extra response header to the client, Set-
Cookie. (The details follow later.)

A user agent returns a Cookie request header (see below) to the
origin server if it chooses to continue a session. The origin server
may ignore it or use it to determine the current state of the
session. It may send back to the client a Set-Cookie response header
with the same or different information, or it may send no Set-Cookie
header at all. The origin server effectively ends a session by
sending the client a Set-Cookie header with Max-Age=0.

Servers may return a Set-Cookie response headers with any response.
User agents should send Cookie request headers, subject to other
rules detailed below, with every request.

An origin server may include multiple Set-Cookie headers in a
response. Note that an intervening gateway could fold multiple such
headers into a single header.


aladdin edited on 2003-12-10 16:00
reply to postreply to post
作者 Re:在不同的網站間分享session [Re:aladdin]
Biologic

生物學下的產物



發文: 524
積分: 4
於 2003-12-10 15:31 user profilesend a private message to usersend email to Biologicreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
aladdin wrote:
請告訴我,沒有cookie,如何讓server這一端在不同的http request之間使用同一個session的資料?Angry

parameters
url?sessionid=id123


reply to postreply to post
作者 Re:在不同的網站間分享session [Re:Biologic]
aladdin

老婆不准我用兒子照片



發文: 175
積分: 3
於 2003-12-10 15:44 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
Biologic wrote:
parameters
url?sessionid=id123


為什麼沒有cookie,就得要透過URL rewriting?那cookie負擔的角色又是什麼?


reply to postreply to post
go to first page go to previous page  1   2   3   4  go to next page go to last page
» JWorld@TW »  Servlet/JSP 討論區

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

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8