java中使用request.getCookies刪除所有cookie

來源:互聯網
上載者:User

標籤:java cookie 刪除

今天在處理一個刪除cookie的需求.我在查詢頁面的時候將查詢條件添加到了cookie中,這樣,下一次查詢的時候,我就可以帶上上一次查詢的條件.但是,再切換組織機構和退出登入的時候,需要刪除所有的cookie.

//這裡為了說明問題,只是嵌入了代碼的一部分@RequestMappingpublic ModelAndView index(@RequestParam(value = "channelName", required = false) String channelName,@RequestParam(value = "channelStatus", required = false) String channelStatus,@RequestParam(value = "mediaId", required = false) Long mediaId,@RequestParam(value = "pageIndex", required = false) Integer pageIndex,@RequestParam(value = "pageSize", required = false) Integer pageSize,HttpSession session, HttpServletRequest request,HttpServletResponse response) {// 如果請求參數為空白,從cookie中擷取參數;如果請求參數不為空白,寫入cookie中儲存,為下次查詢提供參數/* *  操作cookie--如果沒有帶條件,則從cookie中讀取條件 *  規則:當條件全部為空白時,從cookie讀取.當條件有一個不為空白時 *  讀取條件,並儲存到cookie中. */if (channelName == null && channelStatus == null && pageIndex == null&& pageSize == null && mediaId == null) {for (Cookie cookie : request.getCookies()) {if (cookie.getName().equalsIgnoreCase("pmc.channelName")) {channelName = java.net.URLDecoder.decode(cookie.getValue());}if (cookie.getName().equalsIgnoreCase("pmc.channelStatus")) {channelStatus = cookie.getValue();}if (cookie.getName().equalsIgnoreCase("pmc.pageIndex")) {pageIndex = Integer.valueOf(cookie.getValue());}if (cookie.getName().equalsIgnoreCase("pmc.pageSize")) {pageSize = Integer.valueOf(cookie.getValue());}if (cookie.getName().equalsIgnoreCase("pmc.mediaId")) {mediaId = Long.valueOf(cookie.getValue());}}} else {if (channelName != null) {response.addCookie(new Cookie("pmc.channelName", java.net.URLEncoder.encode(channelName)));}else{    //儲存cookie的代碼.cookie2.setMaxAge(0);設定瀏覽器關閉時,cookie到期Cookie cookie2=new Cookie("pmc.channelName", null);cookie2.setMaxAge(0);response.addCookie(cookie2);}if (channelStatus != null) {response.addCookie(new Cookie("pmc.channelStatus",channelStatus));}else{    //儲存cookie的代碼.cookie2.setMaxAge(0);設定瀏覽器關閉時,cookie到期Cookie cookie2=new Cookie("pmc.channelStatus", null);cookie2.setMaxAge(0);response.addCookie(cookie2);}if (pageIndex != null) {response.addCookie(new Cookie("pmc.pageIndex", pageIndex.toString()));}if (pageSize != null) {response.addCookie(new Cookie("pmc.pageSize", pageSize.toString()));}if (mediaId != null) {response.addCookie(new Cookie("pmc.mediaId",mediaId.toString()));}else{     //儲存cookie的代碼.cookie2.setMaxAge(0);設定瀏覽器關閉時,cookie到期Cookie cookie2=new Cookie("pmc.mediaId", null);cookie2.setMaxAge(0);response.addCookie(cookie2);}}

我的目標,就是把這裡的cookie,在退出登入時刪除掉.這樣的cookie值有很多,在整個系統的每一個index.do查詢中都有.我要做的,就是在退出時,擷取所有的cookie,然後將其刪除.我是這樣做的

/** 執行退出 */@RequestMapping(value = "/logout")public ModelAndView logout(HttpServletRequest request,HttpServletResponse response,HttpSession session) {       // 擷取Cookies數組        Cookie[] cookies = request.getCookies();            // 迭代尋找並清除Cookie        for (Cookie cookie: cookies) {            //將cookie.setMaxAge(0)表示刪除cookie.                    cookie.setMaxAge(0);                    cookie.setPath("/");                    response.addCookie(cookie);        }// 修改使用者登陸日誌AuthorizedUser authorizedUser = (AuthorizedUser) session.getAttribute("authorizedUser");logService.updateLoginLog(authorizedUser.getLoginLogId());// 銷毀使用者sessionsession.invalidate();// 跳轉到首頁ModelAndView mv = new ModelAndView("redirect:/");return mv;}

然而,在這個過程中,發現了問題.在退出時,使用request.getCookies()擷取所有的cookie時,始終都只能擷取到一個系統產生的cookie.而我自己手動設定的那些個cookie根本擷取不到.



650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/71/78/wKioL1XRjauBF7flAAQViDNiTU4945.jpg" title="2.png" alt="wKioL1XRjauBF7flAAQViDNiTU4945.jpg" />



經過查閱資料和實驗.終於找到了問題的原因.原因在cookie2.setMaxAge(0);看看一我們是如何設定:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/71/7B/wKiom1XRh__g9KrGAAQnhZwWi1o988.jpg" title="1.png" alt="wKiom1XRh__g9KrGAAQnhZwWi1o988.jpg" />


將cookie2.setMaxAge(0);表示,刪除當前這個cookie.所以,你在其他任何地方都讀取不到這個cookie.由於我沒有設定cookie.setPath()和cookie.setDomain().所有沒有實現真正的刪除,為什麼沒有刪除呢,可以參考這篇文章: http://tompig.iteye.com/blog/714295 


通過查閱資料和測試找到解決方案:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/71/78/wKioL1XRjiDQ0XJVAAHDiBe9x_8580.jpg" title="3.png" alt="wKioL1XRjiDQ0XJVAAHDiBe9x_8580.jpg" />

設定的cookie2.setMaxAge(-1)才真正表示關閉瀏覽器,cookie失效.


終於找到了為什麼在退出登入時擷取不到cookie的原因了.


現在問題又來了,我不能真正實現cookie刪除.這個問題網上的解釋比較多.


網上說,刪除cookie是必須要設定setPath()和setDomain()兩個參數.經過親自測試:我只設定了setPath()就刪除了cookie了.


添加cookie時,設定setPath();

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/71/7B/wKiom1XRkWDgb2BKAADundZHYQM153.jpg" title="5.png" alt="wKiom1XRkWDgb2BKAADundZHYQM153.jpg" />


刪除cookie時,也要設定setPath();

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/71/7B/wKiom1XRkcGAQQjlAAJy8IpH5yo973.jpg" title="6.png" alt="wKiom1XRkcGAQQjlAAJy8IpH5yo973.jpg" />


這個問題終於被解決了.

java中使用request.getCookies刪除所有cookie

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.