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