JavaWeb实现记住密码功能(使用Cookie)
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)相关推荐
- php js记住密码功能,jquery.cookie.js实现用户登录保存密码功能的方法_jquery
本文实例讲述了jquery.cookie.js实现用户登录保存密码功能的方法.分享给大家供大家参考,具体如下: 需要导入的js有jquery.js和jquery.cookie.js 在页面加载时首先尝 ...
- AppCan用cookie实现记住密码功能 [APP]
今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...
- java记住密码 cookie_Java Web网站怎么利用Cookie实现记住密码功能
在做java web网站开发时,为了避免每次登录都需要输入用户名和密码,我们会使用Cookie技术来实现记住密码功能,在这里小编使用简单的项目案例来教大家具体的实现过程. 前期准备 1.下载好jque ...
- vue 登录页面记住密码功能
vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...
- LayUI记住密码功能(已实现)
文章目录 前言 一.效果与逻辑 二.使用步骤 1.html 2.js 三.总结 四.补充 前言 为了提高客户用户体验,每一个管理系统都有自己的记住密码功能.让客户减少账号与密码的输入,从而提高客户的体 ...
- PHP会员登录实现记住密码功能 thinkPHP5
会员登录实现记住密码功能需要用到cookie 和session,首先我们来简单了解一下cookie 和session 的区别 Cookie Cookie是完全保存在客户端.当客户端禁止cookie时将 ...
- vue考试系统后台管理项目-登录、记住密码功能
考试系统后台管理项目介绍: 技术选型:Vue2.0+Elemenu-ui 项目功能介绍: 账户信息模块:菜单权限.角色权限设置.角色权限分配.账号设置.公司分组 考试管理模块:新增/编辑/删除考试试题 ...
- 【html实现记住账号、记住密码功能】
html实现记住账号.记住密码功能 效果图: 1.页面添加记住账号.记住密码多选框 <div class="remember" style="text-align: ...
- PyQt5实现登录界面,包含用户注册,记住密码功能
本文主要基于PyQt5用的是qt designer,连接MySQL实现登录界面,包含注册功能,记住密码功能,说明这一切都是基于在pycharm上配置好了pyuic和qt designer 目录 1.实 ...
- php记住密码怎么写,PHP记住密码功能实现例子
记住密码功能我们在许多网站登录时都会看到有这个功能了,下面我们来看一篇基于php的记住密码功能的实现方法,具体的例子如下所示. 提供两个内置的方法,可以在项目中直接使用,很方便/** * 记住密码/清 ...
最新文章
- 【Java】StopWatch任务执行时间监视器
- flume spooldir bug修复
- 【问链财经-区块链基础知识系列】 第四十课 港版支付宝的区块链跨境汇款与Ripple、Circle大不同
- android小闹钟课程设计,《小闹钟》教学设计
- eclipse主题下载网站
- 分布式与人工智能课程(part15)--深度学习
- Light oj 1214-Large Division (同余定理)
- php 实现application,PHP中实现ASP中的Application 功能
- FastReport 数据区二级显示
- 一位寒门博士的致谢,女友回复...
- 2019年上半年工作总结
- matlab解全微分方程,通过MATLAB求二阶全微分方程解析解
- 后端开发岗位要求汇总
- 使用用软通牒(UltraISO)制作U盘启动盘
- RTC实时时钟实验学习笔记一
- 2D变形效果有几种?变形效果讲解
- yii2-elasticsearch(3)yii2 elasticsearch 的初步尝试
- makefile和make
- 如何实现中英互译?简单的方法介绍
- Android 一种关于解决 No view found for id xxxx for fragment xxxx 问题的方案