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

简介: 使用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");
    }
}
相关文章
|
JavaScript 安全 前端开发
Vue如何读取cookie实现路由守卫(检查用户登录状态)
一般实现路由守卫,判断用户的登录状态使用token和cookie验证两种方法,这次项目后端是给我提供的cookie验证,写到这里就记录一下,希望能帮助到你们
591 0
Vue如何读取cookie实现路由守卫(检查用户登录状态)
|
前端开发
细讲前端设置cookie, 储存用户登录信息
我们都知道如果想做一个用户登录并使浏览器保存其登录信息,使得用户下次再访问网页的时候无需再次进行登录操作,我们需要用到 cookies , 今天我们就来讲讲前端如何给客户端设置 cookie cookie 只有在服务环境下,才能设置,所以如果要尝试练习设置cookie的话,可以使用webstorm编辑器, 它内部自带服务环境,如果用别的编辑器的小伙伴的话,先自己搭一个简单的服务环境哦~
989 0
细讲前端设置cookie, 储存用户登录信息
爬虫使用过程中cookie模拟用户登录和防盗链的使用
1.我们在使用爬虫的过程中会遇到需要登陆以后获取信息的情况,在这种情况下就需要使用cookie记录用户哟登录信息,然后通过cookie信息执行后续的操作. 2.在使用爬虫的过程中我们经常会遇到反扒的情况,我们除了需要考虑headers以外,还需要考虑防盗链的使用.
|
2月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
24 1
|
2天前
|
存储 安全 Java
JavaWeb中的Session和Cookie
本文介绍了JavaWeb中的会话跟踪技术,主要讨论了Cookie和Session的概念、用途、设置与获取方法以及生命周期。Cookie是客户端技术,用于在用户浏览器中存储信息,通常用于保持用户登录状态,有效期可设置。Session则保存在服务器端,用于跟踪用户状态,例如登录信息,生命周期可通过设置最大不活动时间控制。两者之间的主要区别在于数据存储位置和安全性,Cookie数据在客户端,可能存在安全风险,而Session数据在服务器端,相对较安全但会占用服务器资源。
|
6天前
|
存储 搜索推荐 安全
【Cookie和Session辨析】
【Cookie和Session辨析】
10 2
|
12天前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
|
16天前
|
存储 安全 前端开发
禁用Cookie后Session还能用吗?
禁用Cookie后Session还能用吗?
24 1
|
16天前
|
Java
Cookie和Session
Cookie和Session
19 0