<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    jsessionid 問題分析

    Posted on 2011-09-02 16:33 瘋狂 閱讀(19298) 評論(2)  編輯  收藏 所屬分類: web 、apache項目 、方法論架構

    這幾天為了測試人員測試,就把一個tomcat應用整個拷貝了一份,改了下端口一個8080,一個8081,上下文也一樣,結果出問題了:頁面登陸驗證碼死活驗證不過去,最后跟蹤了下后臺發現,登陸界面請求時生成驗證碼并將驗證碼放入session里面,這個sessionid和驗證時從獲取驗證碼的session的的id不一樣,那驗證的時候由于session不一樣,獲取驗證碼肯定為空,最終驗證失敗。

     

    根據一般的流程,瀏覽器首次發出請求的時候服務端會在response信息里面給出:

    Set-Cookie: JSESSIONID=0000yLsny8JFy4nLxDelrrq9Lx1:-1; Path=/test (這里假設服務器生成的sessionid0000yLsny8JFy4nLxDelrrq9Lx1,應用上下文為test)要求瀏覽器設置瀏覽器會話cookie,下次請求的時候在request頭信息里面附帶:

    Cookie: JSESSIONID=0000yLsny8JFy4nLxDelrrq9Lx1:-1 服務器以此來判斷是否統一客戶端發出的請求。

     

    而跟蹤我們的應用發現第一次瀏覽器發出請求后,服務端response信息為:

    Set-CookieJSESSIONID=C7A2EB23B029226E6279448D1CFD6207; Path=/test

    第二次發出請求的時候整個會話信息為:

    響應頭信息原始頭信息:

    Set-Cookie JSESSIONID=AD54301B809A7D7BBF909F10B4C838AA; Path=/test

    請求頭信息原始頭信息:

    Cookie    JSESSIONID=4DF629829C6E18953117AB66777ED2CA

     

    瀏覽器雖然第二次請求帶過去的JSESSIONID并不是第一次設置(C7A2EB23B029226E6279448D1CFD6207),并且服務端又發出了新的Set-Cookie命令和JSESSIONID

     

    最終才想起還有另一個tomcat應用的copy修改了本次的cookie session 里面的JSESSIONID值,

    正好跟蹤到信息為:

    Set-Cookie      JSESSIONID=4DF629829C6E18953117AB66777ED2CA; Path=/test (這一次請求影響)

    Cookie    JSESSIONID=C7A2EB23B029226E6279448D1CFD6207(原應用的JSESSIONID)

     

    通過查看火狐瀏覽器里面兩個應用在同一個主機(localhost)下面只存了一份名為JSESSIONIDcookie值,結果導致互相影響。
     
     

    現在tomcat下的一個辦法就是兩個應用其中一個修改下上下文,例如一個是test,另一個是test1 ,這樣由于cookie的路徑(path)在同一個級別下名稱不一樣將不會互相影響。

    瀏覽器判斷cookie的應該根據主機,路徑,名稱來判斷,通常根據目錄層級不同作用域也不同,例如:

    比如瀏覽器現有三個cookie, path分別為 "/", "/test", "/test/mgr"

    則請求 "/test/other/action.do"時,第1個cookie和第2個cookie會被發給服務端,第三個不會。

    此時瀏覽器請求頭信息里面的session有可能為多個,但名稱都一樣如:

    Cookie: JSESSIONID=8810E51861891187708C53A1805951A1;JSESSIONID=0000yLsny8JFy4nLxDelrrq9Lx1:-1

    這個時候也是出現問題的時候,服務器有可能出現jsessionid不一致的情況,

    一個明顯的問題在websphere下由于默認的cookie session的path為/ 如圖:

    這個時候如果同一臺主機或者ip下部署其他應用,如果都是用JSESSIONID作為key的話,由于/的作用域大,其他的應用將受到影響,首先websphere自己會受到影響,經過測試websphere的每一次請求如下:

    Set-Cookie: JSESSIONID=0000yLsny8JFy4nLxDelrrq9Lx1:-1; Path=/

    然后后面多次出現信息如下:

    相應

    Set-Cookie: JSESSIONID= 0000IsxSqg75ELW4C0Y3YCaRgab:-1; Path=/

    請求

    Cookie:

    JSESSIONID=8810E51861891187708C53A1805951A1(這個為tomcat的);JSESSIONID=0000yLsny8JFy4nLxDelrrq9Lx1:-1

     

    遇到這種異常情況,請大家從cookie的domain,path,作用域的知識分析下,然后就應該能解決這些問題了,適當的修改下cookie的key名稱,和path。

     

    這里給看下百度的明顯和其他的不一樣用的是(baiduid作為key):

     

     

     

    ~~

     

     


    評論

    # re: jsessionid 問題分析  回復  更多評論   

    2011-09-11 21:09 by DB Compare Tool
    拷貝tomcat當然也要清干凈啊

    # re: jsessionid 問題分析  回復  更多評論   

    2011-09-13 09:33 by @joe
    @DB Compare Tool
    這不是清不清干凈的問題吧
    主站蜘蛛池模板: 亚洲最大成人网色香蕉| 亚洲国产区男人本色在线观看| 青草青草视频2免费观看| 成人免费福利电影| 在线a亚洲老鸭窝天堂av高清| 日本一区二区三区免费高清| 亚洲国产午夜电影在线入口| 在线精品一卡乱码免费| 亚洲avav天堂av在线网爱情| 免费在线观看的网站| 亚洲AV日韩AV永久无码色欲| 又粗又硬又黄又爽的免费视频| 一级毛片正片免费视频手机看| 在线观看午夜亚洲一区| 精品亚洲永久免费精品 | aa级一级天堂片免费观看| 亚洲一级免费毛片| 日本免费一本天堂在线| 七次郎成人免费线路视频| 狠狠综合久久综合88亚洲| 四虎国产精品永久免费网址| 亚洲最新中文字幕| 国产嫩草影院精品免费网址| 日本永久免费a∨在线视频| 久久精品国产亚洲| 免费毛片在线看片免费丝瓜视频| 黄色三级三级三级免费看| 伊人久久大香线蕉亚洲| 曰曰鲁夜夜免费播放视频| 日本系列1页亚洲系列| 亚洲av一综合av一区| 性色av免费观看| CAOPORN国产精品免费视频| 亚洲精品美女在线观看| 免费a级黄色毛片| 99热精品在线免费观看| 精品久久亚洲一级α| 亚洲人成网站影音先锋播放| 免费的涩涩视频在线播放| 日韩视频在线观看免费| 亚洲欧美第一成人网站7777|