沒有眼淚
          Don't Cry!
          posts - 13,comments - 44,trackbacks - 0
          通常所說的cookie實際上可以分為2,一種是由Cookie對象產生的保存在客戶端硬盤上的持久化的cookie,另一種就是由session對象產生的保存在瀏覽器內存里的session cookie.session cookie的組成是形如: JSESSIONID=0EB8CEDE030A4B6FB5366317D8BF1978(tomcat).Session cookie何時產生?當新創建一個session對象時產生session cookie.當使用request.getSession()request.getSession(true)方法時,如果請求范圍內根據jsessionid能夠找到一個對應的session對象,則不產生session cookie也不返回給客戶端保存,找不到則新創建一個session cookie并生成一個形如JSESSIONID=0EB8CEDE030A4B6FB5366317D8BF1978(tomcat)session cookie并放在本次響應頭信息中返回給客戶端保存,客戶端之前保存的session cookie也將被這個session cookie所代替.session cookie不同的是,如果服務器端明確使用Cookie類來生成的持久化cookie將在每次響應中返回給客戶端保存,不管客戶端是否存在這個cookie.當瀏覽器接受cookie(不管是持久化cookie還是session cookie),在對同一站點進行訪問時,會自動把這些cookie信息放在請求頭信息中一起發送給服務器端.這樣服務器端就能得到這些cookie來跟蹤會話.向服務器端發送cookie這個過程對用戶來是完全透明的,是瀏覽器自動進行的.
          以上討論是在瀏覽器接受cookie的情況下,下面談談瀏覽器禁用cookie的情況.
          如果瀏覽器禁用了cookie,那么瀏覽器不會接收保存服務器端存在響應頭中的cookie信息(ie6bug,會保存session cookie).瀏覽器再次訪問同一站點時,請求頭信息里也不會攜帶任何cookie信息的(因為瀏覽器根禁止了該功能).正因如此,服務器端接收不到客戶端的cookie信息,也就無法識別客戶端的身份,從而把它當作一個新的客戶對待,也就會丟失以前的會話信息.在這種情況下服務器端使用request.getSession()request.getSession(true)方法時將會重新創建一個session.
          那么如何在用戶禁用了cookie的情況下維護會話呢?以上討論我們已經知道,服務器端判斷是新的會話還是舊的會話是根據請求頭中是否有一個jsessionid.由于瀏覽器禁用了cookie從而不會自動向服務器發送這個參數,那么要維持會話就需要我們自己每次服務器發送請求時帶上這個參數.url重寫正是這樣一種技術,只要在我們的代碼中把所有向服務器發送請求的地方用response.encodeRedirectUrl(String arg0)包裝一下,這樣我們請求的url就會自動加上當前session對象產生的jsessionid.服務器端也能取得這個值從而識別客戶端.
          posted on 2009-04-14 23:59 zhangchao 閱讀(889) 評論(0)  編輯  收藏 所屬分類: web開發

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 张掖市| 依安县| 玉田县| 渭南市| 维西| 汤阴县| 五常市| 涟源市| 英德市| 陇西县| 平山县| 盱眙县| 利川市| 治多县| 嘉黎县| 敖汉旗| 宁武县| 搜索| 扬州市| 鄂托克前旗| 贵州省| 项城市| 玉山县| 高平市| 台南县| 祥云县| 钦州市| 旌德县| 新巴尔虎右旗| 涞水县| 石渠县| 武乡县| 美姑县| 襄垣县| 修水县| 纳雍县| 宝鸡市| 龙井市| 聊城市| 金塔县| 镇坪县|