我是一个学习Servlet的新手。当我在Servlet中使用cookie时,我发现在访问网页后cookie不能被添加。下面是我的代码:
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LastAccessServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String lastAccessTime = null;
Cookie[] cookies = req.getCookies();
PrintWriter writer = resp.getWriter();
for (int i = 0; cookies != null && i < cookies.length; ++i){
if ("lastAccess".equals(cookies[i].getName())) {
lastAccessTime = cookies[i].getValue();
break;
}
}
if (lastAccessTime == null){
writer.println("Your first visit.");
} else {
writer.println("Last time" + lastAccessTime);
}
String currentTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
Cookie cookie = new Cookie("lastAccess", currentTime);
cookie.setMaxAge(999999999);
cookie.setPath("/");
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
这是我的网页:
不管我刷新、重新加载或更改浏览器多少次,结果都是一样的。
我在我的边缘浏览器中检查cookie。
cookie没有我添加的值名lastAccess
,所以我认为问题出在resp.addCookie(cookie);
。但不知道如何解决。
1条答案
按热度按时间e4eetjau1#
您的问题实际上不是代码/逻辑,而是这里的数据。您正在尝试设置一个cookie值,它更像一个日期字符串,看起来像
2022-10-01 03:01:22
。这里的cookie值是非法的。根据RFC6265,您不允许在cookie中使用某些特殊字符。更详细的描述可在此answer中找到你可以通过改变cookie值的形式来解决这个问题。例如,用时间戳代替日期字符串。如下所示。