作者也是刚刚接触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"); } }