java cookie設置注意事項

今天我在設置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名字和值都對不上,後面查了一下,答案如下:

  1. Cookie的兼容性問題

Cookie的格式有2個不同的版本,第一個版本,我們稱爲Cookie Version 0,是最初由Netscape公司制定的,也被幾乎所有的瀏覽器支持。而較新的版本,Cookie Version 1,則是根據RFC 2109文檔制定的。爲了確保兼容性,JAVA規定,前面所提到的涉及Cookie的操作都是針對舊版本的Cookie進行的。而新版本的Cookie目前還不被Javax.servlet.http.Cookie包所支持。

  1. 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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章