我是一個學習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);。但不知道如何解決。
uj5u.com熱心網友回復:
您的問題實際上不在于代碼/邏輯,而在于此處的資料。您正在嘗試設定一個更像 Date 字串的 cookie 值2022-10-01 03:01:22。
這里的 cookie 值是非法的。根據RFC6265,不允許在 cookie 中包含某些特殊字符。此答案提供了更詳細的描述
您可以通過更改可能是您形成 cookie 值的方式來解決它。例如,使用時間戳而不是日期字串。如下所示。
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" new Date(Long.parseLong(lastAccessTime)));
}
String currentTime = String.valueOf( new Date().getTime());
Cookie cookie = new Cookie("lastAccess", currentTime);
cookie.setMaxAge(999999999);
cookie.setPath("/");
resp.addCookie(cookie);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529044.html
標籤:爪哇jsp饼干小服务程序
