java - Servlet 中的 cookie 是什么时候创建的?

标签 java servlets cookies session-cookies

我正在学习 Servlet 和 cookie,但我有一个误解。是否可以在不使用“new Cookie”的情况下创建 cookie?

我知道 cookie 是通过以下语句创建的:

Cookie ck = new Cookie("username",name);

下面的语句用于在客户端浏览器发送cookie:

response.addCookie(ck);

但是我找到了一个应用程序,它没有上面的语句,它在我的浏览器中创建了一个 cookie。如果我在代码中不使用“new Cookie”,那么当我创建新 session 时是否会创建 cookie?

这是代码:

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="Validate">
  User: <input type="text" name="user" /><br/>
  Password: <input type="password" name="pass" ><br/>
  <input type="submit" value="submit">
</form>
</body>
</html>

验证.java

package servlet.httpses;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Validate
 */
@WebServlet("/Validate")
public class Validate extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Validate() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        String name = request.getParameter("user");
        String pass = request.getParameter("pass");

        if(pass.equals("1234")) {

            //creating a session
            HttpSession session = request.getSession();

            session.setAttribute("user", name);

            response.sendRedirect("Welcome");
        }
    }
}

欢迎.java

package servlet.httpses;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Welcome
 */
@WebServlet("/Welcome")
public class Welcome extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Welcome() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession();

        String user = (String) session.getAttribute("user");

        out.println("Hello " + user);

        out.println("<br>Session ID in Request is from a Cookie: " 
        + request.isRequestedSessionIdFromCookie());

        out.println("<br> Session ID: " + session.getId());
        out.println("<br> Creation Time: " + new Date(session.getCreationTime()));
        out.println("<br>Last Accessed Time: " + new Date(session.getLastAccessedTime()));
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

在这种情况下,cookie 是何时创建的?是否可以在不使用“new cookie”的情况下创建 cookie?

提前致谢!

最佳答案

您可以通过两种方式创建 cookie。

  1. 在服务器上创建 cookie 并将其发送到客户端

  2. 在客户端创建 cookie

当你使用new Cookie时,java创建一个cookie对象并发送给客户端,客户端保存cookie。

另一方面,您可以在 JavaScript 的帮助下使用一些数据创建 cookie。

关于java - Servlet 中的 cookie 是什么时候创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50888563/

相关文章:

java - 我应该如何对调用 MySQL 存储过程的 Java 进行单元测试?

不使用 JLabel 的 Java 动画 GIF

java - Android:IF 语句在通过首选项设置时不起作用

Java Servlet 命令行处理

drupal - 使 Drupal cookie 过期的简单代码?

java - 如何覆盖 windows32 中的 java.exe

java - 如何在 JasperReports 中从 Java 向报表传递多个参数并导出为 PDF

java - 通过Servlet提交表单

redirect - WKWebView 无法携带 cookie 进行 302 重定向

javascript - 如何在 cookie 中添加多个对象