使用cookie来记录用户登录次数,为何次数不更新

时间:2022-07-23
本文章向大家介绍使用cookie来记录用户登录次数,为何次数不更新,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

作者也是刚刚接触cookie以及session 首先贴上别人对cookie以及session的理解: cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议: 将登陆信息等重要信息存放为SESSION 其他信息如果需要保留,可以放在COOKIE中 自己做的的是使用cookie来进行账户登录次数的统计。代码很简单但是自己遇到了一个问题,就是自己在更新了cookie的value值后,却一直得不到显示,看网上的资料,在cookie.setvlaue()之后又加上了两句话 cookie.setPath(request.getContextPath()); response.addCookie(cookie); 第二句话,我能理解,视为以防数据修改之后但没有替换,而选择直接替换掉整个cookie的键值对,第一句话看了网上的见解之后,说是定义cookie的使用范围,即该cookie键值对只能在当前的request的请求对象中使用,其他地方不能访问到。自己试了的确之后数据就能更新了,但是自己重新把这两句话删掉之后再次运行,之前的程序数据又能进行更新了,所以自己不是很理解,希望能有大佬赐教。 下面是我的代码 login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'Login.jsp' starting page</title>
  </head>
  <body>
   <form action="Loginservlet" method="post">
          账户:<input type=text name="username"><br>
          密码:<input type=password name="password"><br>
          <input type=submit value="提交">
  </form>
  </body>
</html>

loginservlet.servlet

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
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;

/**
 * Servlet implementation class loginservlet
 */
@WebServlet("/Loginservlet")
public class Loginservlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Loginservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");  
        response.setCharacterEncoding("utf-8");  
        boolean flag=true;
        PrintWriter out=response.getWriter();
		Cookie []cookies=request.getCookies();
		String username=request.getParameter("username");
		int time=0;
		if(cookies!=null)
		{
			for(int i=0;i<cookies.length;i++)
			{
				Cookie cookie=cookies[i];
				if(cookie.getName().equals(username))
				{
					flag=false;
					System.out.println(cookie.getValue());
					cookie.setValue(""+(Integer.parseInt(cookie.getValue())+1));
					//cookie.setPath(request.getContextPath());
					//response.addCookie(cookie);
					time=Integer.parseInt(cookie.getValue());
					if(time<4)
					{
						out.write(username+",你已经登录"+time+"次了");	
					}
					if(time>3)
					{
						out.write("恭喜你获得一份礼物");
						out.write(username+",你已经登录"+time+"次了");	
					}
					break;
				}
			}

		}
		if(cookies==null||flag)
		{
			Cookie cookie1=new Cookie(request.getParameter("username"), Integer.toString(++time));
			//cookie1.setPath(request.getContextPath());
			response.addCookie(cookie1);
			username=cookie1.getName();
			//time=Integer.parseInt(cookie1.getValue());
		    out.write(username+",你已经登录"+time+"次了");	
		}
		if(request.getParameter("username").trim().equals(""))
			response.sendRedirect("Login.jsp");
		}

}