簡體   English   中英

刪除.JSP文件中的Java cookie

[英]Deleting Java cookie in .JSP file

我正在使用以下函數來創建在Java Servlet中設置的cookie。 我試圖在.JSP文件的scriptlet中刪除它。 但是它不是刪除cookie,關於為什么的任何想法?

這是我用來在Servlet中創建cookie的函數:

    for(String classId :request.getParameterValues("classId")){
        optionCookie = new Cookie("componentSearchOptionSelect",classId);
        response.addCookie(optionCookie);
    }

這是我用來刪除scriptlet中的cookie的代碼:

Cookie[] cookies = null;
        cookies = request.getCookies();
        if(cookies != null){
            for(int i = 0; i < cookies.length; i++){
                 Cookie cookie = cookies[i];
                 if(cookie.getName().equals("componentSearchOptionSelect")){

                     selectedClass = cookie.getValue();
                     cookie.setMaxAge(0);
                     response.addCookie(cookie);
                 }
             }
        }

JSP作為一種視圖技術,負責生成HTTP響應正文。 Cookie必須放在HTTP響應標頭中。 因此,如果您將cookie代碼放入JSP的中間位置,並且JSP那時已經生成了很多HTML,導致響應已經提交,那么設置HTTP響應標頭為時已晚。 HTTP響應標頭已經發送到客戶端,這是無法返回的點。 如果您已經注意了服務器日志,那么您應該已經注意到了一個IllegalStateException帶有一個非常容易解釋的消息和跟蹤。

因此,要解決您的問題,只需確保在尚未提交響應時刪除cookie。 在JSP向HTTP響應主體寫入任何內容之前,將包含所有業務邏輯的scriptlet放在JSP頁面的頂部。

<%
    // Business logic here.
%>
<!DOCTYPE html>
<html>
    ... (presentation logic here)
</html>

實際上,JSP是執行業務邏輯的錯誤位置(閱讀: 您根本不應該使用scriptlet )。 您應該為此使用servletservlet過濾器 在您的特定情況下,我認為您只需要一個帶有doGet()的servlet。

請嘗試這個。

/*
Cookie[] cookies = null;
cookies = request.getCookies();
if(cookies != null){
    for(int i = 0; i < cookies.length; i++){
         Cookie cookie = cookies[i];
         if(cookie.getName().equals("componentSearchOptionSelect")){
             selectedClass = cookie.getValue();
             cookie.setMaxAge(0);
             response.addCookie(cookie);
         }
     }
}
*/

Cookie cookie = new Cookie("componentSearchOptionSelect", "");
cookie.setMaxAge(0);
response.addCookie(cookie);

順便說一句,為什么您多次設置相同的Cookie值? cookie componentSearchOptionSelect的值是request.getParameterValues("classId"))最后一個的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM