Löschen von Java-cookie .JSP-Datei
Bin ich mit der folgenden Funktion erstellen Sie ein cookie, welches sich in einem Java-Servlet. Ich bin versucht zu löschen, es in einem scriptlet in einem .JSP-Datei. Es ist jedoch nicht das löschen der Cookies, irgendwelche Ideen, warum?
Dies ist die Funktion, dass ich verwende zum erstellen des cookie in die Servlet:
for(String classId :request.getParameterValues("classId")){
optionCookie = new Cookie("componentSearchOptionSelect",classId);
response.addCookie(optionCookie);
}
Dies ist der code, den ich benutze, um den cookie löschen in den scriptlet:
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);
}
}
}
InformationsquelleAutor Colin747 | 2013-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSP als view-Technologie ist verantwortlich für die Erzeugung der HTTP-response-body. Cookies gehen müssen in der HTTP-Antwort-Header. Also, wenn Sie die cookie-code auf halbem Weg in einer JSP und JSP hat an diesem Punkt bereits genrated, dass viel von HTML, die verursacht, dass die Reaktion bereits begangen, dann ist es einfach zu spät, um eine HTTP-Antwort-header. Der HTTP-Antwort-Header bereits an den client gesendet, das ist ein point of no return. Wenn Sie schon bezahlt haben die Aufmerksamkeit auf die server-logs, dann sollten Sie bemerkt haben, ein
IllegalStateException
mit einem ziemlich selbsterklärend Nachricht und Spur.So, um Ihr problem zu beheben, stellen Sie sicher, dass Sie den cookie löschen, wenn die Antwort nicht doch noch zugesagt. Setzen Sie die scriptlet, die alle in der business logic in der sehr Spitze der JSP-Seite, lange bevor die JSP-schreibt etwas auf die HTTP-response-body.
Eigentlich, JSP ist die falsch zum ausführen von business Logik (lies: Sie sollten nicht mit Skriptlets an alle). Sie sollten eine servlet oder servlet-filter. In Ihrem Fall, ich denke, Sie brauchen nur ein servlet mit
doGet()
.InformationsquelleAutor BalusC
Bitte versuchen Sie dies.
Übrigens, Warum stellst du gleiche Wert
Cookie
viele Male?Der Wert des Cookies
componentSearchOptionSelect
ist der Wert des letzten ausrequest.getParameterValues("classId"))
.for
Schleife hat nur ein Feld im array, das ist ein Problem, ich werde dir später, aber für jetzt funktioniert es. Sie Lösung hat nicht funktioniert, nachdem der code lief diesetMaxAge
bleibt bei-1
.Wie haben Sie überprüft, das ist Sie Wert? aus browser oder einmal mehr JSP?
Ich verwendete den folgenden code:
Cookie[] cookies2 = null; cookies2 = request.getCookies(); if(cookies2 != null){ for(int i = 0; i < cookies2.length; i++){ Cookie cookie2 = cookies[i]; if(cookie2.getName().equals("componentSearchOptionSelect")){ System.out.println(cookie2.getMaxAge()); } } }
zum Beispiel, Sie zu löschen und überprüfen Sie Cookie in der gleichen jsp? dies ist natürlich Cookie ist noch nicht löschen vom Browser. Weil Sie Ihre Aktion(löschen) noch nicht zur Verfügung gestellt Browser. ein.jsp -> löschen der Cookies und HTML zeigen. b.jsp -> check Cookie. Sie tun kann? vielleicht können Sie beobachten, doch Cookie auf dem Browser. aber vielleicht Browser keine Cookies auf b.jsp.
Das problem ist, wenn ich aktualisieren Sie die gleichen .JSP-Seite das cookie noch vorhanden ist, selbst, wenn es sollte vorher gelöscht, bevor die Seite aktualisieren. Es kann gesehen werden in den browser dev tools (Chrome) und es ist auch meine Einstellung ausgewählt drop-down-option.
InformationsquelleAutor koji