JavaWeb实现记住密码功能(使用Cookie)

1、Cookie知识点

  • cookie介绍

    • 背景:HTTP协议作是⽆状态协议,⽆状态指每次request请求之前是相互独⽴的,当前请求 并不会记录它的上⼀次请求信息。 存在这样的问题,既然⽆状态,那完成⼀套完整的业务逻 辑,需要发送多次请求,那么怎么标识这些请求都是同个浏览器操作呢?
    • 解决⽅案:
      • 浏览器发送request请求到服务器,服务器除了返回请求的response之外,还给请求分 配⼀个唯⼀标识ID和response⼀并返回给浏览器
      • 服务器在本地创建⼀个map结构,专⻔以key-value存储这个ID标识和浏览器的关系
      • 当浏览器的第⼀次请求后已经分配⼀个ID,当第⼆次访问时会⾃动带上这个标识ID,服 务会获取这个标识ID去map⾥⾯找上⼀次request的信息状态且做对应的更新操作 服务 端⽣成这个全局的唯⼀标识,传递给客户端⽤于标记这次请求就是cookie; 服务器创建 的那个map结构就是session
      • cookies由服务端⽣成,⽤于标记客户端的唯⼀标识,在每次⽹络请求中,都会被传送。
      • session服务端⾃⼰维护的⼀个map数据结构,记录key-Object上下⽂内容状态
      • 核⼼:它⽤于告知服务端两个请求是否来⾃同⼀浏览器,如保持⽤户的登录状态。 Cookie使基于⽆状态的HTTP协议记录稳定的状态信息成为了可能。 浏览器查看多个站 点的cookie
  • cookie的属性

    • Name : 名称
    • Value : 值
    • Domain:表示当前cookie所属于哪个域或⼦域下⾯
    • Expires/Max-age:表示了cookie的有效期,是⼀个时间,过了这个时间,该cookie就失效了
    • Path:表示cookie的所属路径。
    • size: ⼤⼩,多数浏览器都是4000多个字节
    • http-only: 表示这个cookie不能被客户端使⽤js读取到,是不公开的cookie (chrome调试器的console中输⼊document.cookie将得不到标记为HttpOnly的字段)
    • Secure: 标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端, 从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)⽆法使⽤Cookie的 Secure 标记 SameSite(特有的,可以忽略)
  • Cookie的缺陷

    • cookie会被附加在每个HTTP请求中,增加了流量。
    • 在HTTP请求中的cookie是明⽂传递的,所以安全性成问题,除⾮⽤HTTPS
    • Cookie的⼤⼩有限制,对于复杂的存储需求来说不满⾜
    • 如果cookie泄露,你猜猜会发⽣什么问题?
  • 浏览器允许每个域名所包含的cookie数量?

    • 多数浏览器允许最多是50个,部分浏览器是30或者20;

    • 满后会有多种剔除策略,⽐如LRU,权重等

  • Cookie的现状:

    • Cookie曾⼀度⽤于客户端数据的存储,因当时并没有其它合适的存储办法⽽作为唯⼀的存储⼿段

    • 现代浏览器开始⽀持各种各样的存储⽅式,Cookie渐渐被少⽤了,新的浏览器API已经允许开发者 直接将数据存储到本地,⽐如localStorage、SessionStorage等 参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

2、项目实战

1、编写前端 login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="${pageContext.request.contextPath }/login" method="post">用户名:<input type="text" name="username" value="${cookiename }"/><br>密码:<input type="password" name="pwd" value="${cookiepwd }"/><br><input type="submit" value="登录"/></form><hr>用户名:${username }密码:${pwd }<br><c:if test="${username!=null }"><a href="${pageContext.request.contextPath }/logoutController">退出登录</a></c:if></body>
</html>

2、编写后端,实现cookie的记录与取值

2.1 loginController.java

package cn.yz123123.controller;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
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;@WebServlet("/login")
public class loginController extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");req.setAttribute("username", username);String pwd = req.getParameter("pwd");req.setAttribute("pwd", pwd);Cookie cookiename = new Cookie("cookiename", username);cookiename.setMaxAge(1000000);Cookie cookiepwd = new Cookie("cookiepwd", pwd);cookiepwd.setMaxAge(1000000);resp.addCookie(cookiename);resp.addCookie(cookiepwd);req.getRequestDispatcher("/cookieController").forward(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}

2.2、CookieController.java

package cn.yz123123.controller;import java.io.IOException;
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;@WebServlet("/cookieController")
public class CookieController extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie[] cookies = request.getCookies();for(Cookie cookie:cookies){if(cookie.getName().equals("cookiename")){request.getServletContext().setAttribute("cookiename", cookie.getValue());}if(cookie.getName().equals("cookiepwd")){request.getServletContext().setAttribute("cookiepwd", cookie.getValue());}}request.getRequestDispatcher("/login.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

2.3 logoutController

package cn.yz123123.controller;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/logoutController")
public class logoutController extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getSession().invalidate();request.getRequestDispatcher("/login").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

JavaWeb实现记住密码功能(使用Cookie)相关推荐

  1. php js记住密码功能,jquery.cookie.js实现用户登录保存密码功能的方法_jquery

    本文实例讲述了jquery.cookie.js实现用户登录保存密码功能的方法.分享给大家供大家参考,具体如下: 需要导入的js有jquery.js和jquery.cookie.js 在页面加载时首先尝 ...

  2. AppCan用cookie实现记住密码功能 [APP]

    今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...

  3. java记住密码 cookie_Java Web网站怎么利用Cookie实现记住密码功能

    在做java web网站开发时,为了避免每次登录都需要输入用户名和密码,我们会使用Cookie技术来实现记住密码功能,在这里小编使用简单的项目案例来教大家具体的实现过程. 前期准备 1.下载好jque ...

  4. vue 登录页面记住密码功能

    vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...

  5. LayUI记住密码功能(已实现)

    文章目录 前言 一.效果与逻辑 二.使用步骤 1.html 2.js 三.总结 四.补充 前言 为了提高客户用户体验,每一个管理系统都有自己的记住密码功能.让客户减少账号与密码的输入,从而提高客户的体 ...

  6. PHP会员登录实现记住密码功能 thinkPHP5

    会员登录实现记住密码功能需要用到cookie 和session,首先我们来简单了解一下cookie 和session 的区别 Cookie Cookie是完全保存在客户端.当客户端禁止cookie时将 ...

  7. vue考试系统后台管理项目-登录、记住密码功能

    考试系统后台管理项目介绍: 技术选型:Vue2.0+Elemenu-ui 项目功能介绍: 账户信息模块:菜单权限.角色权限设置.角色权限分配.账号设置.公司分组 考试管理模块:新增/编辑/删除考试试题 ...

  8. 【html实现记住账号、记住密码功能】

    html实现记住账号.记住密码功能 效果图: 1.页面添加记住账号.记住密码多选框 <div class="remember" style="text-align: ...

  9. PyQt5实现登录界面,包含用户注册,记住密码功能

    本文主要基于PyQt5用的是qt designer,连接MySQL实现登录界面,包含注册功能,记住密码功能,说明这一切都是基于在pycharm上配置好了pyuic和qt designer 目录 1.实 ...

  10. php记住密码怎么写,PHP记住密码功能实现例子

    记住密码功能我们在许多网站登录时都会看到有这个功能了,下面我们来看一篇基于php的记住密码功能的实现方法,具体的例子如下所示. 提供两个内置的方法,可以在项目中直接使用,很方便/** * 记住密码/清 ...

最新文章

  1. 【Java】StopWatch任务执行时间监视器
  2. flume spooldir bug修复
  3. 【问链财经-区块链基础知识系列】 第四十课 港版支付宝的区块链跨境汇款与Ripple、Circle大不同
  4. android小闹钟课程设计,《小闹钟》教学设计
  5. eclipse主题下载网站
  6. 分布式与人工智能课程(part15)--深度学习
  7. Light oj 1214-Large Division (同余定理)
  8. php 实现application,PHP中实现ASP中的Application 功能
  9. FastReport 数据区二级显示
  10. 一位寒门博士的致谢,女友回复...
  11. 2019年上半年工作总结
  12. matlab解全微分方程,通过MATLAB求二阶全微分方程解析解
  13. 后端开发岗位要求汇总
  14. 使用用软通牒(UltraISO)制作U盘启动盘
  15. RTC实时时钟实验学习笔记一
  16. 2D变形效果有几种?变形效果讲解
  17. yii2-elasticsearch(3)yii2 elasticsearch 的初步尝试
  18. makefile和make
  19. 如何实现中英互译?简单的方法介绍
  20. Android 一种关于解决 No view found for id xxxx for fragment xxxx 问题的方案

热门文章

  1. 信息学奥赛一本通1011
  2. jdk动态代理的实现流程(事务处理)
  3. python接口测试面试题
  4. lingoes/灵格斯词霸/灵格斯翻译家开始弹窗去除方法
  5. CSS世界Bug般的存在——字母x与“居中”
  6. 600岁故宫“新政”“萌萌哒”
  7. html里关于表单的一些操作代码
  8. 安川机器人仿真软件安装
  9. Python下的中文分词实现
  10. 月神带你逻辑漏洞挖掘