Мне интересно узнать, в какой момент в моем коде JSESSIONID создается и удаляется.
Servlet.java:
public class Servlet extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String url = "";
switch (request.getParameter("action")){
case "viewCookieList":
url = "/cookieList.jsp";
break;
case "deleteAllCookies":
deleteCookies(request, response);
url = "/cookieList.jsp";
break;
}
getServletContext()
.getRequestDispatcher(url)
.forward(request, response);
}
private void deleteCookies(HttpServletRequest request, HttpServletResponse response){
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
}
cookieList.jsp:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<link rel="stylesheet" href="style/main.css" type="text/css">
<title>Cookie List</title>
</head>
<body>
<h1>Cookies</h1>
<p>Here's a table with all of the cookies that this browser is sending to the current server.</p>
<table>
<tr> <th> <label class="tableHeader">
Name
</label> </th>
<th> <label class="tableHeader">
Value
</label> </th> </tr>
<c:forEach var="c" items="${cookie}">
<tr> <td> <label class="cookieName">
${c.value.name}
</label> </td>
<td> <label class="cookieValue">
${c.value.value}
</label> </td> </tr>
</c:forEach>
</table>
<a href="servlet?action=deleteAllCookies">Delete Cookies</a><br>
</body>
</html>
Я попадаю на cookieList.jsp через ссылку действия viewCookieList на другой JSP.Когда я прихожу к cookieList.jsp, он отображает файлы cookie, как и ожидалось.Если я нажимаю ссылку «Удалить файлы cookie» один раз, вызывается deleteCookies(request, response)
, а затем снова отображается cookieList.jsp, но, судя по всему, он не изменился.То же имя файла cookie JSESSIONID отображается с тем же значением.
Если я нажимаю ссылку «Удалить файлы cookie» второй раз, имя и значение файла cookie JSESSIONID больше не отображаются, что свидетельствует о том, что оно было удалено во второй раз.,Если я нажимаю ссылку «Удалить файлы cookie» в третий раз, отображается имя файла cookie JSESSIONID с новым значением.Такое поведение, по-видимому, продолжается, когда клики с четными номерами не показывают ни имени, ни значения, а клики с нечетными числами показывают имя JSESSIONID с новым значением.
Так когда же создается файл cookie JSESSIONID и когда он удаляется?
С этого ответа SO , если JSESSIONID не существует при вызове JSP, создается новый, но тогда почему для получения нового cookie-файла JSESSIONID требуются две итерации?По связанному вопросу: почему список файлов cookie должен быть нулевым, если при вызове JSP создается новый файл cookie JSESSIONID.