使用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");
}
}
- weex里Vuex state使用storage持久化
- 网络字体@font-face 如何处理网页中的特殊字体
- python实现多变量线性回归(Linear Regression with Multiple Variables)
- 【美团技术团队博客】序列化和反序列化
- Java 静态代理与动态代理
- ELK日志套件安装与使用
- HTML知识复习
- MarkDown 常用语法教程
- CSS3盒阴影 box-shadow
- HTML5-类库系列 补讲AJAX
- HTML5-类库系列 事件与获取完成版样式
- 为什么不要在 JavaScript 中使用位操作符?
- 高级语言的编译:链接及装载过程介绍
- 美团技术团队博客:Kafka文件存储机制那些事
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- maven 安装alipay-sdk包到本地及远程仓库
- maven 基础 maven-shade-pluginMaven Scopepom.xml 样例
- zookeeper应用:屏障、队列、分布式锁
- Java AIO 异步IO应用实例
- Java NIO 同步非阻塞应用实例
- Spring Boot 示例项目
- Jetty 发布web服务
- Netty 异步的、事件驱动的网络应用程序框架和工具
- Consul 服务发现和配置
- Consul 启动命令,Web UI
- Thrift 跨服务开发框架
- Java并发之BlockingQueue 阻塞队列(ArrayBlockingQueue、LinkedBlockingQueue、DelayQueue、PriorityBlockingQueue、Sy
- Java并发之CountDownLatch 多功能同步工具类
- Java并发之CyclicBarrier 可重用同步工具类
- Java并发之ScheduledExecutorService(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)