隨筆-50  評論-55  文章-8  trackbacks-0

          今天測試設置和獲取Cookie遇到了一點小問題,很奇怪的問題;
          把J2ee服務部署在本地 8080端口;訪問任何一個服務時,如果客戶端沒有cookie,則下發cookie,
          ?如果客戶端已經有了該cookie的值就不下發,代碼邏輯如下:
          String uid="";
          Cookie mycookies[] = request.getCookies();
          ?if (mycookies!= null) {
          ??????????? for (int i = 0; i < mycookies.length; i++) {
          ??????????????? if ("uid".equalsIgnoreCase(mycookies[i].getName())) {
          ??????????????????? uid=mycookies[i].getValue();
          ??????????????? }
          ?????????????}
          ??????? }
          ?????if(!StringUtils.isNull(uid)){
          ????? //do nothing
          ? }else{
          ? String host=request.getHeader("host");
          ?uid=UUID.create();
          ?Cookie? mycookie = new Cookie("uid",uid);
          ?mycookie.setDomain(host);
          ?mycookie.setMaxAge(93312000);//三年
          ?response.addCookie(mycookie);
          }
          System.out.println("uid is>"+uid);
          1、訪問:
          ?? http://localhost:8080/
          ?? 以及內部的頁面,打印uid的值是相同的;符合要求
          2、訪問:
          ? http://127.0.0.1:8080
          ? 以及內部的頁面, uid每次都獲取得值都是不同的;
          兩者的區別僅僅的訪問的方式不同,如果用ip訪問
          ??Cookie mycookies[] = request.getCookies();中永遠獲取不到uid的值;
          80端口號除外

          查了瀏覽器的具體cookie值,發現
          http://localhost:8080/?訪問的時候,cookie值放在localhost下,服務器自動生成的SESSIONID也是存放在localhost路徑下。
          http://127.0.0.1:8080/ 訪問的時候,cookie uid值放在127.0.0.1:8080下,在127.0.0.1:8080下的cookie服務端的Servlet永遠都獲取不到;而服務器自動生成的SESSIONID則是在127.0.0.1下,與uid存放位置不同。

          所以在服務端下發cookie的時候,
          String host=request.getHeader("host");
          需要修改為
          if(host.indexOf(":")>-1){
          ??? ??host=host.split(":")[0];
          ??? ?}
          或者放棄設置mycookie.setDomain(host);
          這樣cookie值也是保存在127.0.0.1下的,與端口號不關聯
          ?當然是服務器已經有域名的就不會出現端口號下獲取不到cookie的值;

          posted on 2009-09-07 20:06 蔣家狂潮 閱讀(5239) 評論(1)  編輯  收藏 所屬分類: JWeb

          評論:
          # re: Servlet的Cookie值保存與獲取 2009-09-08 11:27 | 禮物吧
          原來如此  回復  更多評論
            
          主站蜘蛛池模板: 南通市| 南投县| 东台市| 武邑县| 汨罗市| 平昌县| 电白县| 曲水县| 九龙县| 西峡县| 湘潭市| 忻州市| 万荣县| 沂水县| 宣城市| 临朐县| 收藏| 宣汉县| 牙克石市| 渭源县| 射洪县| 鲜城| 滨海县| 巴南区| 南投县| 林西县| 龙山县| 宜川县| 大姚县| 日土县| 托克逊县| 陇西县| 庄浪县| 广州市| 旺苍县| 北宁市| 库尔勒市| 珠海市| 平陆县| 澄迈县| 淮滨县|