Java 使用JSESSIONID cookie在servlet中处理会话未获取会话
我读到,为了在servlet中持久化会话,一个名为JSESSIONID的cookie被保存在客户端Java 使用JSESSIONID cookie在servlet中处理会话未获取会话,java,session,servlets,cookies,jsessionid,Java,Session,Servlets,Cookies,Jsessionid,我读到,为了在servlet中持久化会话,一个名为JSESSIONID的cookie被保存在客户端我也检查了它,发现名为JSESSIONID的localhostcookie带有一些随机字符串值。 因此,我试图通过在servlet中创建JSESSIONID cookie来手动创建会话,但当我试图获取会话时,它不起作用。 这里发生了什么事? 除了cookie(JSESSIONID)之外,还有其他东西可以存储在会话创建的何处吗如果没有,为什么我无法获得会话? 请帮忙 我用来创建cookie和获取会话的
我也检查了它,发现名为JSESSIONID的localhostcookie带有一些随机字符串值。
因此,我试图通过在servlet中创建JSESSIONID cookie来手动创建会话,但当我试图获取会话时,它不起作用。
这里发生了什么事?
除了cookie(JSESSIONID)之外,还有其他东西可以存储在会话创建的何处吗
如果没有,为什么我无法获得会话?
请帮忙 我用来创建cookie和获取会话的代码
package sessionHandling;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessionhandling")
public class SessionHandling extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream out = response.getOutputStream();
out.print("Hello Mr.! How are you?");
HttpSession session = request.getSession(false);
if(session != null){
out.println("You are logged in.");
out.println("session found with "+session.getId());
out.println("session found with "+session.getLastAccessedTime());
}else{
//session = request.getSession(true);
Cookie JSESSIONID = new Cookie("JSESSIONID", "12345");
JSESSIONID.setMaxAge(-1);
response.addCookie(JSESSIONID);
System.out.println("Cookie Created");
out.print("You are not logged in");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
您不负责创建或跟踪cookie。servlet容器将为您处理此问题 一旦调用:
HttpSession session = request.getSession(true);
或
然后servlet容器将开始为您维护会话(并根据需要生成cookie)
HttpSession
对象在请求之间保存在服务器内存中,通常由会话id查找。如果您自己创建cookie,服务器将不知道它或任何关联的HttpSession的任何信息。一旦您运行代码,第一次会话将为null,您将指示浏览器(或任何其他客户端)创建JESSIONID cookie。在此之前,一切都是正确的
现在,当您再次发出请求时,浏览器(或任何其他客户机)将把cookie附加到请求,tomcat(或任何其他servlet引擎)将收到JESSIONID。在这里,一切正常
但是现在呢?Tomcat(或任何其他servlet引擎)将搜索它是否有任何会话ID为“12345”的HttpSession对象。你认为会找到它吗?不会
为什么?您上面编写的代码只是在响应消息中设置cookie头。它没有指示tomcat(或任何其他servlet引擎)将这个名为cookie的JSESSIONID视为会话Id,并在Java堆内部创建相应的HttpSession对象
这就是为什么我们使用request.getSession()
。它指示tomcat做两件事-
HttpSession session = request.getSession();