Точка, в которой JSESSIONID создается в моем коде - PullRequest
0 голосов
/ 08 февраля 2019

Мне интересно узнать, в какой момент в моем коде 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.

...