Cookie实现十天内免登录

  • 代码:
   - CheckLogin 查看是否获取到了Cookie,如果获取到了连接数据库验证Cookie发过来的用户名和密码,如果没有获取到Cookie信息,那么就跳转到登录页

      import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*; public class CheckLogin extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //定义需要的变量
String userEmail=null;
String userPwd=null;
String userName=null;
boolean loginFlag=false; //获取浏览器提交给服务器的Cookie信息
Cookie[] cookies=request.getCookies(); //遍历Cookie数组
if(cookies!=null){
for (Cookie cookie:cookies) {
String cookieName=cookie.getName();
String cookieValue=cookie.getValue();
if(cookieName.equals("userEmail")){
userEmail=cookieValue;
System.out.println(userEmail);
}else if(cookieName.equals("userPwd")){
userPwd=cookieValue;
System.out.println(userPwd);
}
}
}else{
response.sendRedirect("/myWeb/login.html"); } if(userEmail!=null && userPwd!=null) {
//创建数据库连接对象
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null; try { // 连接数据库
Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root", "123456"); // 获取预编译数据库操作对象
String sql = "select username,email,userpwd from t_userInfo where email=? and userpwd=?";
preparedStatement = connection.prepareStatement(sql); //给预编译语句传参
preparedStatement.setString(1, userEmail);
preparedStatement.setString(2, userPwd); //执行SQL语句
resultSet = preparedStatement.executeQuery(); //处理查询结果集
while (resultSet.next()) {
loginFlag = true;
userName = resultSet.getString("username");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
} finally { //释放资源
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//设置字符集,获取字符输入流
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
if (loginFlag) {
//验证Cookie发过来的邮箱密码都正确
//HTML代码
out.print(" <!DOCTYPE html>");
out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
out.print(" <head>");
out.print(" <meta charset='UTF-8'>");
out.print(" <title>用户信息</title>");
out.print(" </head>");
out.print(" <body>");
out.print(" <h3 align='center'>登陆成功,欢迎" + userName + "</h3>");
out.print(" </body>");
out.print(" </html>");
} else { //登录失败
//HTML代码
out.print(" <!DOCTYPE html>");
out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
out.print(" <head>");
out.print(" <meta charset='UTF-8'>");
out.print(" <title>用户信息</title>");
out.print(" </head>");
out.print(" <body>");
out.print(" <h3 align='center'>密码错误,请重试");
out.print(" <a href='/myWeb/login.html'>重新登录</a>");
out.print(" </body>");
out.print(" </html>"); }
}
}else{
response.sendRedirect("/myWeb/login.html");
}
} }
  • 登录页, 获取用户在表单中输入的用户名和密码,连接数据库验证用户名和密码, 验证用户名和密码正确的话,继续验证用户是否勾选了免登录的复选框,如果勾选了,创建cookie,并将cookie发送给浏览器。

               package com.shige.controller;
    
          import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*; public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //解决中文乱码问题
    request.setCharacterEncoding("UTF-8"); //获取用户提交的表单数据
    String userEmail=request.getParameter("email");
    String userPwd=request.getParameter("password");
    //创建数据库连接对象
    Connection connection=null;
    PreparedStatement preparedStatement=null;
    ResultSet resultSet=null;
    boolean loginFlag=false;
    String userName=null; try { // 连接数据库
    Class.forName("com.mysql.cj.jdbc.Driver"); // 获取连接
    connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
    "root","123456"); // 获取预编译数据库操作对象
    String sql="select username,email,userpwd from t_userInfo where email=? and userpwd=?";
    preparedStatement=connection.prepareStatement(sql); //给预编译语句传参
    preparedStatement.setString(1,userEmail);
    preparedStatement.setString(2,userPwd); //执行SQL语句
    resultSet=preparedStatement.executeQuery(); //处理查询结果集 while(resultSet.next()){
    loginFlag=true;
    userName=resultSet.getString("username");
    } } catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
    }finally { //释放资源
    if(resultSet!=null){
    try {
    resultSet.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(preparedStatement!=null){
    try {
    preparedStatement.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } if(connection!=null){
    try {
    connection.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    } if(loginFlag){
    //登录成功
    //登录成功够查看用户是否选择了自动登录的按钮
    String tenDayAutoLogin=request.getParameter("tenDayAutoLogin");
    System.out.println(tenDayAutoLogin);
    if("ok".equals(tenDayAutoLogin)){
    //说明用户勾选了十天内免登录的选项
    //创建Cookie对象
    Cookie cookie1=new Cookie("userEmail",userEmail);
    Cookie cookie2=new Cookie("userPwd",userPwd); //设置Cookie有效时间
    cookie1.setMaxAge(60*60*24*10);
    cookie2.setMaxAge(60*60*24*10); //设置Cookie关联路径
    cookie1.setPath(request.getContextPath());
    cookie2.setPath(request.getContextPath()); //将Cookie对象发送给浏览器
    response.addCookie(cookie1);
    response.addCookie(cookie2);
    }
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out=response.getWriter();
    //HTML代码
    out.print(" <!DOCTYPE html>");
    out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
    out.print(" <head>");
    out.print(" <meta charset='UTF-8'>");
    out.print(" <title>用户信息</title>");
    out.print(" </head>");
    out.print(" <body>");
    out.print(" <h3 align='center'>登陆成功,欢迎"+userName+"</h3>");
    out.print(" </body>");
    out.print(" </html>");
    }else{
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out=response.getWriter();
    //登录失败
    //HTML代码
    out.print(" <!DOCTYPE html>");
    out.print("<meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/> ");
    out.print(" <head>");
    out.print(" <meta charset='UTF-8'>");
    out.print(" <title>用户信息</title>");
    out.print(" </head>");
    out.print(" <body>");
    out.print(" <h3 align='center'>密码错误,请重试");
    out.print(" <a href='/myWeb/login.html'>重新登录</a>");
    out.print(" </body>");
    out.print(" </html>"); }
    } }
    }

JAVAEE_Servlet_22_Cookie实现十天内免登录的更多相关文章

  1. Spring Security框架下实现两周内自动登录"记住我"功能

    本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...

  2. JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)

    一.数据库db_01   表usert   字段username,password 二. 目录 三. 配置信息 四. 代码 index.jsp <script type="text/j ...

  3. spring boot 实现密码连续输入错误5次,限制十分钟内不能进行登录

    我们要实现的就是,密码连续输入错误5次,就限制用户十分钟不能进行登录. 大致的流程图 数据库设计如下 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ...

  4. SourceTree 免登录跳过初始设置 - 转

    转自:http://www.cnblogs.com/xiofee/p/sourcetree_pass_initialization_setup.html 在SourceTree的配置目录新建(或修改) ...

  5. 火车采集器 帝国CMS7.2免登录发布模块

    帝国cms7.2增加了金刚模式,登录发布有难度.免登录发布模块配合火车采集器,完美解决你遇到的问题. 免登录直接获取栏目列表 通过文件内设置密码免登录发布数据 帝国cms7.2免登陆文章发布接口使用说 ...

  6. django 实现同一个ip十分钟内只能注册一次

    很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注 ...

  7. django 实现同一个ip十分钟内只能注册一次(redis版本)

    上一篇文章,django 实现同一个ip十分钟内只能注册一次 的时候,我们在注册的时候选择使用的使我们的数据库来报错我们的注册的ip信息,可是如果数据量大,用户多的时候,单单靠我们的数据库 来储存我们 ...

  8. js之10天内免登陆

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 基于 Laravel-Admin 在十分钟内搭建起功能齐全的后台模板

    http://laravelacademy.org/post/6468.html 1.简介 为 Laravel 提供后台模板的项目越来越多,学院君已陆续为大家介绍过Laravel Angular Ad ...

随机推荐

  1. js中this指向的问题与联系

    前言 JavaScript 中最大的一个安全问题,也是最令人困惑的一个问题,就是在某些情况下this的值是如何确定的.有js基础的同学面对这个问题基本可以想到:this的指向和函数调用的方式相关.这当 ...

  2. 整合shiro+jwt大体思路

    springboot整合shiro大体上的思路: 1.自定义一个类Realm extends AuthorizingRealm{} 主要是对token授权和认证 重写2个方法 doGetAuthori ...

  3. 微信小程序:如何删除所有的console.log?

    使用vscode正则匹配,手动去除 1.用vscode打开微信小程序项目 2.Edit-----replace in Files 1. console.log()加了分号 console\.log\( ...

  4. SpringBoot Admin应用监控搭建

    简介 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI. 参考手册地址:htt ...

  5. 错误信息:...\output\project.axf: error: l6218e: undefined symbol usart1_confing (referred from main.o).

    说明:此文档知识用来记录,顺便给大家作为参考,如有错误的地方请大家多多指正,在下内心定会感激不尽. 前言:关于这个问题,我曾花了一个下午在网上寻找,网上的说法五花八门,我办法试尽,但遍寻无果.由此我认 ...

  6. Tango with django 1.9 中文——2.准备工作

    在正式开始写代码之前,设置好开发环境是非常重要的.你要确保所有必须的组件都已安装好.本章将概述五个你需要了解的关键组件的设置和使用.清单如下: 使用命令行 Python Python包管理器pip和虚 ...

  7. Redis之面试连环炮

    目录 1.简单介绍一下Redis 2.分布式缓存常见的技术选型方案有哪些? 3.Redis和Memcached的区别和共同点 4. 缓存数据的处理流程是怎样的? 5. 为什么要用 Redis/为什么要 ...

  8. 从客流统计到营销赋能,Re-ID加速实体商业数字化转型 | 爱分析洞见

    2020年中国实体商业受到突发疫情的重大影响.以危机为契机,实体商业加速数字化转型,利用创新应用服务自身业务.在此阶段,基于Re-ID(Person Re-identification,即行人再识别) ...

  9. 设计模式之工厂方法模式(Factory Method Pattern)

    一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...

  10. SHELL编程入门简介

    一.SHELL软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...