簡體   English   中英

設置會話Cookie監聽器

[英]Set session cookie listener

我如何在我的網站中說,cookie被加載了多少次? 例如,我用我的憑據登錄,我的jsp運行並顯示結果...當我得到結果時,我想說出用戶名憑據,如下所示:

 <% 
      String Usuario = null;
      Cookie[] cookies =request.getCookies();
      if (cookies != null){
          for(Cookie cookie : cookies){
              if(cookie.getName().equals("usuario"))
                  Usuario = cookie.getValue();

          }
      }
  if (Usuario == null)
      response.sendRedirect("Index.html");
  %>
  <h3>
      Hi <%=Usuario %>, Login Complete.
  </h3>

  <form action="Logout" method="post">
      <input type="submit" value="Logout">
  </form>

但是,如果我重新加載頁面,我想計算cookie被重新加載的次數,因此在響應中我得到:

      <h3>
          Hi <%=Usuario %>, Login Complete. + cookiecount
      </h3>

我怎樣才能做到這一點?

JSP:

<!DOCTYPE html>
 <html>
     <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Login con Cookies</title>
</head>
<body>
  <% 
      String Usuario = null;
      Cookie[] cookies =request.getCookies();
      if (cookies != null){
          for(Cookie cookie : cookies){
              if(cookie.getName().equals("usuario"))
                  Usuario = cookie.getValue();

          }
      }
  if (Usuario == null)
      response.sendRedirect("Index.html");
  %>
  <h3>
      Hi <%=Usuario %>, Login Complete.
  </h3>

  <form action="Logout" method="post">
      <input type="submit" value="Logout">
  </form>
</body>

LoginServlet:

 @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    String user = request.getParameter("usuario");
    String contra = request.getParameter("contrasena");

    if (userID.equals(user) && password.equals(contra)){
        Cookie Gerardocookie = new Cookie("usuario",user);
        Gerardocookie.setMaxAge(60 * 60);
        response.addCookie(Gerardocookie);
        response.sendRedirect("Procesardatos.jsp");
    } else{
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.html");
        PrintWriter out = response.getWriter();
        out.println("<font color=red>Usuario y/o contrasena invalidas");
        rd.include(request, response);
    }
}

--------------------------------更新----------------- ----------------------

JSP:

    <body>
     <% 

 String usuario = (String)session.getAttribute("usuario");
 if (usuario == null) {
response.sendRedirect("Index.html");
return;
 }
 AtomicInteger sessionCount = (AtomicInteger)session.getAttribute("count");
 int count = sessionCount.incrementAndGet(); // count = ++sessionCount
  %>

SERVLET:

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String user = request.getParameter("usuario");
        String contra = request.getParameter("contrasena");

     HttpSession session = request.getSession();
      session.setAttribute("usuario", user);
      session.setAttribute("count", new AtomicInteger());

    if (userID.equals(user) && password.equals(contra)){
        Cookie Gerardocookie = new Cookie("usuario",user);
        Gerardocookie.setMaxAge(60 * 60);
        response.addCookie(Gerardocookie);
        response.sendRedirect("Procesardatos.jsp");
    } else{
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.html");
        PrintWriter out = response.getWriter();
        out.println("<font color=red>Usuario y/o contrasena invalidas");
        rd.include(request, response);
    }
}

Cookies非常容易被破解,因此簡單地在Cookie中設置用戶名對於確保安全性幾乎沒有用。 任何會話cookie都可以作為永不過期的cookie復制到另一台計算機上。

建議您將用戶名存儲在會話中。 即使cookie被盜,一旦服務器使會話期滿,cookie也將變得無用。 (您還可以采取其他措施來進一步提高安全性。)

然后,您可以使用計數器存儲第二個會話屬性:

HttpSession session = request.getSession();
session.setAttribute("usuario", user);
session.setAttribute("count", new AtomicInteger());

在后續請求中,您查詢會話:

HttpSession session = request.getSession();
String usuario = (String)session.getAttribute("usuario");
if (usuario == null) {
    response.sendRedirect("Index.html");
    return;
}
AtomicInteger sessionCount = (AtomicInteger)session.getAttribute("count");
int count = sessionCount.incrementAndGet(); // count = ++sessionCount

這與您的要求一致,但是它將增加對執行此操作的服務器的每個請求的計數器。 如果除登錄頁面之外的所有請求均得到保護,則它們都將執行此操作,因此您基本上是在計算請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM