原文地址:http://www.blogjava.net/persister/archive/2009/10/02/297103.htmlhtml
調用Cookie對象的構造函數能夠建立Cookie。Cookie對象的構造函數有兩個字符串參數:Cookie名字和Cookie值。
Cookie cookie = new Cookie(name,value);
調用下面的方法時出現一個問題
response.addCookie(cookie);//cookie 是一個Cookie實例
問題報錯:java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
很顯然Cookie之中存在了非法參數,通過測試發現cookie之中包含""r"n"、""n"時就會出現這個異常。
由於cookie中部分值是經過文本框錄入的,在<textarea/>標籤中鍵入回車鍵後,value值中就加入了""r"n",
把這樣的值賦給cookie,執行response.addCookie(cookie);時則出現異常。
解決辦法:使用String類的replace()方法。
Java代碼
java
1 str = str.replace(""r"n", "<br>");
2 str = str.replace(""n", "<br>");
3
4 Cookie cookie = new Cookie('cookName',str);
5 //永久有效
6 cookie.setMaxAge(60*60*24*365);
7 response.addCookie(cookie);cookie
剛纔看到Base64錯誤,一般不將數據直接保存在cookie中,而要進行Base64編碼
ide
String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes("UTF-8"))); //設置UTF-8不然會亂碼
Debug.log("Ba64:"+ cookieValueBase64, module);
cookieValueBase64 = cookieValueBase64.replace(""r"n", "");
cookieValueBase64 = cookieValueBase64.replace(""n", "");
Cookie cookie = new Cookie(key, cookieValueBase64);
cookie.setMaxAge(time);
cookie.setPath("/");// 設置適用路經
res.addCookie(cookie);// 將cookie添加到response對象中。由response對象返回給戶端
函數
取得時候:new String(Base64.decode(ck.getValue()),"UTF-8");
這樣作就好了嗎?發現仍是不夠,出現什麼問題呢?
原來若是cookie值中出現等號,那麼取出來的值只取等號前面的值,等號及等號後面的值會被忽略
Base64編碼難保不出現等號,怎麼解決呢?採用UrlEncoder和UrlDecoder,存的時候:
測試
String cookieValueBase64 = new String(Base64.encode(cookieValue.getBytes("UTF-8")));
cookieValueBase64 = cookieValueBase64.replace(""r"n", "");
cookieValueBase64 = cookieValueBase64.replace(""n", "");
String cookieValueUrlEncode = URLEncoder.encode(cookieValueBase64, "UTF-8");編碼
取的時候:
new String(Base64.decode(URLDecoder.decode(ck.getValue(), "UTF-8")),"UTF-8");
這樣不少特殊字符就能夠了。spa