热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cookie实现记住用户名密码

前言本文提供使用cookie实现记住用户名、密码的代码实例、难点注释。文末有完整项目代码下载地址。实现界面初始登录界面输入:张三123456点击登录之后跳转界面

前言

本文提供使用COOKIE实现记住用户名、密码的代码实例、难点注释。
文末有完整项目代码下载地址。


实现界面

初始登录界面
在这里插入图片描述
输入:
张三
123456
点击登录之后跳转界面:
在这里插入图片描述
可查看用户信息:
在这里插入图片描述
关闭所有页面,重新打开登录页面后保留上一次登录信息:
在这里插入图片描述


实现代码


login.jsp

<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" import&#61;"java.util.*,java.net.*" language&#61;"java" %>
<%String path &#61; request.getContextPath();String basePath &#61; request.getScheme() &#43; "://" &#43; request.getServerName() &#43; ":" &#43; request.getServerPort() &#43; path &#43; "/";%>

">


用户登录




<%request.setCharacterEncoding("utf-8");String userName &#61; "";String passWord &#61; "";//以下表示找到已存在的COOKIE对象COOKIE[] COOKIEs &#61; request.getCOOKIEs();if (COOKIEs !&#61; null && COOKIEs.length > 0) {for (COOKIE c : COOKIEs) {if (c.getName().equals("usernameC")) {userName &#61; URLDecoder.decode(c.getValue(), "utf-8");//使用URLDecoder解码}if (c.getName().equals("passwordC")) {passWord &#61; URLDecoder.decode(c.getValue(), "utf-8");}}}
%>
用户名&#xff1a;"/>
密码&#xff1a;"/>
十天内记住我的登录状态




dologin.jsp

<%&#64; page import&#61;"java.text.CollationKey" %>
<%&#64; page import&#61;"java.net.*" %>
<%&#64; page import&#61;"sun.nio.cs.UTF_32" %>
<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" %>
<%String path &#61; request.getContextPath();String basePath &#61; request.getScheme() &#43; "://" &#43; request.getServerName() &#43; ":" &#43; request.getServerPort() &#43; path &#43; "/";
%>

">


登录成功&#xff01;










<%//作用是用指定的编码集去覆盖request对象中的默认的"ISO-8859-1"编码集&#xff0c;// 这样request.getParameter("")方法就会用新的编码集去解码&#xff0c;// 但是这个方法有一个条件&#xff0c;就是必须在第一次使用request时就要调用这个方法来设置编码集&#xff0c;否则该方法就会无效。//这里设置的是编码&#xff0c;之后在user中取值还需要解码&#xff08;或者转码&#xff09;&#xff1a;URLDecoder.decode(c.getValue(),"utf-8");//使用URLDecoder解码request.setCharacterEncoding("utf-8");//首先判断用户是否选择了记住登录状态String[] isUseCOOKIE &#61; request.getParameterValues("isUseCOOKIE");if (isUseCOOKIE !&#61; null && isUseCOOKIE.length > 0) {//把用户名和密码保存在COOKIE对象中String username &#61; URLEncoder.encode(request.getParameter("username"), "utf-8");//使用URLEncoder解决中文报错问题&#xff0c;在net包中String password &#61; URLEncoder.encode(request.getParameter("password"), "utf-8");COOKIE usernameCOOKIE &#61; new COOKIE("usernameC", username);COOKIE passwordCOOKIE &#61; new COOKIE("passwordC", password);//保存上面两个对象usernameCOOKIE.setMaxAge(864000);passwordCOOKIE.setMaxAge(864000);//该COOKIE对象保存多少秒&#xff08;在这里是设置生存期限为十天&#xff09;response.addCOOKIE(usernameCOOKIE);response.addCOOKIE(passwordCOOKIE);} else {//未选择记住&#xff0c;将COOKIE对象置为失效//以下表示找到已存在的COOKIE对象COOKIE[] COOKIEs &#61; request.getCOOKIEs();if (COOKIEs !&#61; null && COOKIEs.length > 0) {for (COOKIE c : COOKIEs) {if (c.getName().equals("usernameC") || c.getName().equals("passwordC")) {c.setMaxAge(0);//设置COOKIE失效response.addCOOKIE(c);//重新保存}}}}
%>
查看用户信息



users.jsp

<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" %>
<%String path &#61; request.getContextPath();String basePath &#61; request.getScheme() &#43; "://" &#43; request.getServerName() &#43; ":" &#43; request.getServerPort() &#43; path &#43; "/";
%>

">


用户信息










<%request.setCharacterEncoding("utf-8");String userName &#61; "";String passWord &#61; "";//以下表示找到已存在的COOKIE对象COOKIE[] COOKIEs &#61; request.getCOOKIEs();if (COOKIEs !&#61; null && COOKIEs.length > 0) {for (COOKIE c : COOKIEs) {if (c.getName().equals("usernameC")) {userName &#61; URLDecoder.decode(c.getValue(), "utf-8");//使用URLDecoder解码}if (c.getName().equals("passwordC")) {passWord &#61; URLDecoder.decode(c.getValue(), "utf-8");//使用URLDecoder解码}}}
%>
用户名&#xff1a;<%&#61;userName%>

密码&#xff1a;<%&#61;passWord%>


博主使用&#xff08;intellij idea&#43;tomcat&#xff09;
github项目地址&#xff1a;https://github.com/StathamWYJ/COOKIEDemo


推荐阅读
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
author-avatar
changless
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有