Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置会话cookie侦听器_Java_Jsp_Servlets_Web Applications_Session Cookies - Fatal编程技术网

Java 设置会话cookie侦听器

Java 设置会话cookie侦听器,java,jsp,servlets,web-applications,session-cookies,Java,Jsp,Servlets,Web Applications,Session Cookies,我怎样才能在我的网站上说,一个cookie被加载了多少次? 例如,我使用凭据登录,运行jsp并显示结果。。。当我得到结果时,我想这样说用户名凭证: <% String Usuario = null; Cookie[] cookies =request.getCookies(); if (cookies != null){ for(Cookie cookie : cookies){ if(cookie.g

我怎样才能在我的网站上说,一个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:

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:

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);
    }
}

cookie很容易被黑客攻击,因此简单地在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

这与您的请求是一致的,但它会增加对执行此操作的服务器的每个请求的计数器。如果除了登录页面之外的所有请求都是安全的,那么它们都会这样做,因此您基本上是在计算请求。

我尝试使用您的代码来证明这一点。。。但是我的jsp上有一个错误。。。请检查我的编辑。如果是我的更新,我如何显示会话时间?或者我如何实现你将我共享到我的应用程序中的代码?不要同时执行cookie和session。删除cookie代码。-当询问错误时,包括错误,否则我们不知道你在说什么。可能是因为您没有声明会话。你忘了第一行。会话已提供给您。你不必得到它。与您的请求相同。请参见此处,了解已可用的变量:yap。。。servlet完成它:D。。所以它现在起作用了。。我只需添加刷新次数,无需登录
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