Cookie的应用——Servlet实现三天免登录
1、工程结构:

2、Servlet的运用:
(1)登录界面:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式
response.getWriter().write("<html>");
response.getWriter().write("<head>");
response.getWriter().write("<title>");
response.getWriter().write("Login");
response.getWriter().write("</title>");
response.getWriter().write("</head>");
response.getWriter().write("<body bgcolor=\"aqua\">");
response.getWriter().write("<center>");
response.getWriter().write("<h3>");
response.getWriter().write("登录");
response.getWriter().write("</h3>");
response.getWriter().write("<form action=\"/Servlet_login_war_exploded/login\" method=\"get\">");
response.getWriter().write(" 用户名:<input type=\"text\" name=\"username\" size=\"12\"><br>");
response.getWriter().write("密 码 :<input type=\"password\" name=\"password\" size=\"6\" ><br><br>");
response.getWriter().write("<input type=\"submit\" value=\"登录\">");
response.getWriter().write("<input type=\"reset\" value=\"取消\">");
response.getWriter().write("</form>");
response.getWriter().write("</center>");
response.getWriter().write("</body>");
response.getWriter().write("</html>");
}

(2)LogServlet实现数据库和表单数据的连接,如果在数据库中有对应的用户登录信息则登录成功。如果是第一次登录,还需要建立Cookie,以便下次登陆的时候能够直接读取Cookie中的信息,不用再手动输入自己的信息。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection con=null;
login log= null;
String account=request.getParameter("username");//获得表单数据
String password=request.getParameter("password");
Cookie cookie=new Cookie(account,password);
cookie.setPath("/Servlet_login_war_exploded/cookie");
cookie.setMaxAge(**);//三天
response.addCookie(cookie);
try {
con=C3p0Utils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select * from login where account=? and password=?";
Object[] select = {account,password};
log = qr.query(con, sql, new BeanHandler<login>((login.class)), select);
if(log!=null){
response.getWriter().write("nihao"+account);
}
else{
response.getWriter().write("wrong");
}
}
catch (SQLException e) {
throw new RuntimeException(e);
}
}

在响应中,存在Cookie信息和Cookie的过期时间。
(3)查询Cookie是否存在,如果存在,再与数据库中的信息进行对比(只有Cookie是不行的,防止用户已经对账户注销,即数据库中已经没有了用户的信息,而使用Cookie进行登录显然是不合理的)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式
Cookie[] cookies=request.getCookies();
Connection con=null;
login log= null;
;
try {
con= C3p0Utils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "Select * from login";
List<login> list = qr.query(con, sql, new BeanListHandler<login>((login.class)));
if(cookies!=null) {//验证数据库中是否有与Cookie对应的用户
; i < list.size(); i++) {
log= list.get(i);
for (Cookie cookie : cookies) {
if((log.getAccount().equals(cookie.getName()))&&(log.getPassword().equals(cookie.getValue()))){
successNum++;
}
}
}
){
response.getWriter().write("Successful login with Cookie!");
}
else{
request.getRequestDispatcher("page").forward(request,response);
}
}
else{
request.getRequestDispatcher("page").forward(request,response);//请求转发
}
}
catch (SQLException e) {
throw new RuntimeException(e);
}
}
(4)过程演示:
第一次访问CookieServlet(因为没有Cookie,或者没有符合要求的Cookie,因此要手动输入实现登录):

点击登录(在这个过程中,已经生成了Cookie):

第二次访问CookieServlet(将Cookie中的信息与数据库中的数据进行比对),下图是已经有Cookie的情况:

显然:第二次访问的时候,没有登录界面,可以直接调用Cookie中的数据。
Cookie的应用——Servlet实现三天免登录的更多相关文章
- ServletContext对象应用——三天免登录
1.用到的知识点: (1)Cookie (2)Session (3)ServletContext 其中Cookie和Session是会话技术的组成部分,一次会话从打开浏览器的某个站点开始,到浏览器关闭 ...
- Session的应用——三天免登录
1.使用Cookie实现的登录的不足: protected void doGet(HttpServletRequest request, HttpServletResponse response) t ...
- cookie之三天免登录代码
LoginCookie.java 1 package com.bjsxt.cookie; import java.io.IOException; import java.net.URLDecoder; ...
- Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二)
原文出自csdn: http://blog.csdn.net/sk719887916/article/details/51700659: 通过对Retrofit2.0的<Retrofit 2.0 ...
- Cookie俩步操作实现n天免登陆
实现这个功能主要思路是:在登录成功的时候去给用户名和密码加上Cookie,将他们的值存在Cookie中,为了下次登录记住用户名和密码,然后在登录界面,获取所有的cookie,然后将值一一遍历出来.和用 ...
- [py][mx]django的cookie和session操作-7天免登录
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- spring mvc 用cookie和拦截器实现自动登录(/免登录)
Cookie/Session机制详解:http://blog.csdn.net/fangaoxin/article/details/6952954 SpringMVC记住密码功能:http://blo ...
- Android Okhttp完美同步持久Cookie实现免登录
通过对Retrofit2.0的<Retrofit 2.0 超能实践,完美支持Https传输>基础入门和案例实践,掌握了怎么样使用Retrofit访问网络,加入自定义header,包括加入S ...
- java:struts框架2(方法的动态和静态调用,获取Servlet API三种方式(推荐IOC(控制反转)),拦截器,静态代理和动态代理(Spring AOP))
1.方法的静态和动态调用: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...
随机推荐
- Python装饰器完全解读
1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入理解并应用装饰器,你会更加感慨——人生苦短,我用Python. 2 初步理解装 ...
- C# 一个计算器功能实现引发的思考
一.需求 计算器功能需求,这个众所周知,很明确了. 二.步骤分析 1)初级实现计算器 static int Calculator(int a,int b,string str) { switch(st ...
- Springboot源码分析之jar探秘
摘要: 利用IDEA等工具打包会出现springboot-0.0.1-SNAPSHOT.jar,springboot-0.0.1-SNAPSHOT.jar.original,前面说过它们之间的关系了, ...
- 帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析
帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析 一.漏洞描述 该漏洞是由于代码只使用htmlspecialchars进行实体编码过滤,而且参数用的是ENT_QUOTES(编码双引号和单 ...
- VMware Workstation 15 Pro 永久激活密钥
VMware Workstation 15 Pro 永久激活密钥 一. 激活密钥 YG5H2-ANZ0H-M8ERY-TXZZZ-YKRV8 UG5J2-0ME12-M89WY-NPWXX-WQH ...
- React Native的APP打包教程
1.改软件的名称 2.改软件的图标 3.给做好的项目打成APP包 改软件的名称 找到项目的改名的位置 然后用记事本打开strings.xml,然后改自己想要的名字 改软件的图标 找到如下5个文件,然后 ...
- ssh-key生成密钥及SSH无密码登录的配置
文章作者:foochane 原文链接:https://foochane.cn/article/2019061601.html 1 ssh-keygen命令 ssh-keygen命令说明: -t :指 ...
- 我常用的一些linux命令
之前做过两年的运维,用过很多命令,深切体会到某些linux命令熟练掌握后对效率提升有多大.举个简单的例子,在做了研发后经常会有跑一些数据,对于结果数据的处理,我们的产品同学一般都习惯于用excel做统 ...
- C#开发BIMFACE系列6 服务端API之获取文件信息
在<C#开发BIMFACE系列4 服务端API之源上传文件>.<C#开发BIMFACE系列5 服务端API之文件直传>两篇文章中详细介绍了如何将本地文件上传到BIMFACE服务 ...
- egret之消除游戏开发
1.地图 (1)地图形状不同,尺寸不变 (2)背景图变化 2.步数 (1)不同关卡步数不同 (2)步数为01,游戏失败 3.道具 4.消除 (1)>=3可消除 (2)不可消除时,自动打乱 5.数 ...