Den*_*nko 0 java cookies session servlets
我需要实现简单的servlet用户身份验证(在Java动态Web项目中),但有些事情让我感到困惑.
首先,servlet由于某种原因创建了cookie,JSESSIONID尽管我从未要求它.而且,我不能改变它的价值,如果我这样做request.addCookie(new Cookie("JSESSIONID", session.getId())),它会产生这样的东西:
Cookie: JSESSIONID=6B5B441038414B4381EDB7470018F90E; JSESSIONID=7890D45DF445635C49BDEB3CADA8AD99; .......
Run Code Online (Sandbox Code Playgroud)
所以,它复制了cookie.
其次,我不确定在哪里比较cookie和会话的id,以及在何处以及如何正确创建会话(即request.getSession(true? / false? / nothing?);)
我已经阅读了一些文档但仍需要帮助.
我有一个servlet HomeServlet,authentication如果用户未经过身份验证,则会将用户重定向到页面.
这是我如何做到的(HomeServlet.java):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(request.getSession().getAttribute("user") != null) {
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
} else {
response.sendRedirect("authentication");
}
}
Run Code Online (Sandbox Code Playgroud)
而且我也有AuthServletjsp页面提供身份验证表单并验证用户.
AuthServlet.java:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("ACTION");
if ("login".equals(action)) {
String[] result = doSomeValidations();
if (result.size() > 0) { // show validation errors
request.setAttribute("errorLoginMessage", result);
request.setAttribute("email", email);
doGet(request, response);
} else { // authenticate user
request.getSession().setAttribute("user", userObject);
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}
} else if ("signup".equals(action)) {
// ...........................
} else {
doGet(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
那么,你能帮我理解吗?如何实施用户身份验证并让用户在整个会话期间保持登录状态?
首先,servlet由于某种原因创建了cookie JSESSIONID,尽管我从未要求它
HttpSession jsession = request.getSession();
Run Code Online (Sandbox Code Playgroud)
您在这里请求会话,并且JSESSIONID容器在响应中创建cookie
如何正确创建会话request.getSession(true?/ false?/ nothing?);
request.getSession()并且request.getSession(true)如果需要他们开始一个新的会话是完全一样的,但request.getSession(false)意味着如果已经有会话使用它但是如果没有不启动会话.您希望如何以及在何处开始会话完全取决于您的要求
response.addCookie(new Cookie("JSESSIONID", jsession.getId()));
Run Code Online (Sandbox Code Playgroud)
你没有被要求JSESSIONID自己添加一个cookie,容器会为你做.
此外,您应该在应用中创建一次会话,一旦JSESSIONIDcookie存储在用户的浏览器中(提供了cookie),它将与请求一起发送.
如何实现用户身份验证
非常主观并且取决于要求,你可以阅读这个https://docs.oracle.com/cd/E19226-01/820-7627/bncby/index.html
让用户在整个会话期间登录
一旦用户通过身份验证,您的会话cookie将帮助您,例如登录Facebook并保持您的cookie选项卡打开