【发布时间】:2021-04-24 01:07:31
【问题描述】:
我正在练习维护客户端和服务器之间的会话。为此,我使用了简单的解决方案,其中 JSESSIONID 存储在 cookie 中。所以我的小程序是这样工作的:
index.html:
<html><body>
<form action="testing">
<input type="text" name="animal">
<button>Go</button>
</form>
</body></html>
MyServlet.java(在 XML 中映射为 /testing):
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
String name = req.getParameter("animal");
PrintWriter pw = resp.getWriter();
pw.print("Welcome " + name + "<br>");
HttpSession session = req.getSession();
if (session.isNew()) {
pw.print("New session: " + session.getId() + "<br>");
} else {
pw.print("Old session: " + session.getId() + "<br>");
}
pw.print("<a href=\'index.html\'> Home </a>");
}
}
所以,如果我从 FORM 提交的东西超过两次,服务器应该“找到”我存储在堆中的 JSESSIONID。这是提交 FORM 时的外观图片(我在输入中输入了“鹦鹉”):
但后来我在浏览器中禁用了 cookie。之后,我的服务器再也找不到用户的 JSESSIONID,因为用户实际上从未将其存储在任何地方。请记住,以前,JSESSIONID 存储在 cookie 中,但由于我禁用了它们,它不可能再将它存储在那里。所以现在,我被困住了。
在这种情况下我该怎么办?我遇到了response.encodeURL(),它使用 URL 并将其 JSESSIONID 附加到 URL 中。但是我很难理解如何实现它以及它是如何在内部工作的。有人可以告诉我如何使用encodeURL() 来解决这个问题,并实际解释一下在实现这样的实现后代码是如何工作的吗?
【问题讨论】:
标签: java session servlets session-cookies urlencode