在我的代码中创建JSESSIONID的位置

时间:2019-02-07 21:21:53

标签: java jsp servlets cookies jsessionid

我很想知道在我的代码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>

我通过另一个JSP上的viewCookieList操作链接访问cookieList.jsp。当我到达cookieList.jsp时,它将按预期显示cookie。如果单击一次“删除Cookie”链接,将调用deleteCookies(request, response),然后再次显示cookieList.jsp,但在所有外观上都没有改变。相同的JSESSIONID cookie名称显示为相同的值。

如果第二次单击“删除Cookie”链接,则不再显示JSESSIONID cookie名称和值,这表明这是第二次删除它。如果我第三次单击“删除Cookie”链接,则会显示具有新值的JSESSIONID cookie名称。这种行为似乎继续,偶数点击不显示名称或值,而奇数点击显示JSESSIONID名称具有新值。

那么什么时候创建JSESSIONID cookie以及何时删除它?

this SO answer开始,如果在调用JSP时不存在JSESSIONID,则会创建一个新的,但是为什么要花两次迭代才能获得一个新的JSESSIONID cookie?对于一个相关的问题,如果在调用JSP时创建了一个新的JSESSIONID cookie,为什么cookie列表应该永远为空。

0 个答案:

没有答案