今天我在設置cookie的時候,發現cookie的值獲取有問題
問題代碼
//創建cookie,將當前的時間作爲cookie的值發送給客戶端
String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Cookie cookie=new Cookie("lastAccess",currentTime);
//發送cookie
cookie.setMaxAge(-1);
//cookie.setVersion(1);
response.addCookie(cookie);
打印出cookie名字和cookie值:
JSESSIONID
545965F19ABA4D699AAED7B782D3E43D
我靠,我設置的cookie名字和值都對不上,後面查了一下,答案如下:
- Cookie的兼容性問題
Cookie的格式有2個不同的版本,第一個版本,我們稱爲Cookie Version 0,是最初由Netscape公司制定的,也被幾乎所有的瀏覽器支持。而較新的版本,Cookie Version 1,則是根據RFC 2109文檔制定的。爲了確保兼容性,JAVA規定,前面所提到的涉及Cookie的操作都是針對舊版本的Cookie進行的。而新版本的Cookie目前還不被Javax.servlet.http.Cookie包所支持。
- Cookie的內容
同樣的Cookie的內容的字符限制針對不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括號,圓括號,等於號(=),逗號,雙引號,斜槓,問號,@符號,冒號,分號都不能作爲Cookie的內容。這也就是爲什麼我們在例子中設定Cookie的內容爲“Test_Content”的原因。
雖然在Cookie Version 1規定中放寬了限制,可以使用這些字符,但是考慮到新版本的Cookie規範目前仍然沒有爲所有的瀏覽器所支持,因而爲保險起見,我們應該在Cookie的內容中儘量避免使用這些字符。
Cookie版本:
目前有兩個版本:
版本0 : 由Netscape公司制定的,也被幾乎所有的瀏覽器支持. Java中爲了保持兼容性, 目前只支持到版本0, Cookie的內容中不能空格,方括號,圓括號,等於號(=),逗號,雙引號,斜槓,問號,@符號,冒號,分號。
版本1 : 根據RFC 2109文檔制定的. 放寬了很多限制. 上面所限制的字符都可以使用. 但爲了保持兼容性, 應該儘量避免使用這些特殊字符.
解決:
不要用空格冒號等特殊符號就行了,我試了一下設置cookie版本爲1,也是無效的,可能是和瀏覽器有關
String currentTime=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
Cookie cookie=new Cookie("lastAccess",currentTime);
//發送cookie
cookie.setMaxAge(-1);
cookie.setPath("/");
//System.out.println(cookie.getVersion());
cookie.setVersion(1);
System.out.println(cookie.getVersion());
response.addCookie(cookie);