JavaWeb 中Cookie实现记住密码的功能示例
作者:justdoit_potato 发布时间:2023-04-06 05:06:48
本文主要内容:
•1、什么是Cookie
•2、Cookie带来的好处
•3、Cookie的主要方法
一、什么是Cookie
cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。Cookie的目的就是为用户带来方便,为网站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB,因此Cookie不会塞满你的硬盘。
例如,当我们第一次访问网站输入用户名密码时,可以选择让系统记住用户名密码,下次就不用重新输入了,这就是典型的Cookie的应用。
二、Cookie带来的好处:
cookies给网站和用户带来的好处非常多:
1. Cookie能使站点跟踪特定访问者的访问次数、最后访问时间等
2. Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告
3. Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点
4. Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务在JSP中,我们也可以使用Cookie,来编写一些功能强大的应用程序。
有些浏览器可以禁用Cookie,所以不能使用Cookie来完成核心的业务。
三、Cookie类的主要方法:
int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。
int setMaxAge() 设置Cookie过期时间,以秒计算。
String getName() 返回Cookie的名字
String getValue() 返回Cookie的值。
void setValue(String newValue) cookie创建后设置一个新的值。
注:名字和值是我们始终关心的两个部分。稍后会详细介绍getName/setName、getValue/setValue。
四、代码举例:
【实例】实现记住密码、自动登录的功能
新建JavaWeb工程Test06.
login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%
String username = "";
String password = "";
//获取当前站点的所有Cookie
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {//对cookies中的数据进行遍历,找到用户名、密码的数据
if ("username".equals(cookies[i].getName())) {
username = cookies[i].getValue();
} else if ("password".equals(cookies[i].getName())) {
password = cookies[i].getValue();
}
}
%>
</head>
<body>
<form action="login_handler.jsp" method="post">
username:<input type="text" name="name" value="<%=username%>" /><br/>
password:<input type="password" name="pwd" value="<%=password%>" /><br/>
<input type="checkbox" value="y" name="isLogin">自动登录<br/>
<input type="submit" value="登录" />
</form>
</body>
</html>
13行代码:获取当前站点所有的Cookie。注:这个Cookie类是在接下来的login_handler.jsp文件中定义的。
26行的 value="<%=username%>"
,以及27行的value="<%=password%>"
,是在16行、18行获取到的值。
login_handler.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String flag = request.getParameter("isLogin");
if (!"admin".equals(name) && !"123".equals(pwd)) {
response.sendRedirect("error.jsp");
} else {
if ("y".equals(flag)) {
//创建两个Cookie对象
Cookie nameCookie = new Cookie("username", name);
//设置Cookie的有效期为3天
nameCookie.setMaxAge(60 * 60 * 24 * 3);
Cookie pwdCookie = new Cookie("password", pwd);
pwdCookie.setMaxAge(60 * 60 * 24 * 3);
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
}
response.sendRedirect("success.jsp");
}
%>
核心代码是11行至20行。
11行:如果用户勾选了“自动登录”,就把用户名和密码的信息放到Cookie中。
第15、17行代码是设置Cookie的存储时间。如果不设置Cookie的存储时间,则默认的存储时间为0,此时Cookie保存的数据是存放在内存中的,当浏览器关闭,则Cookie消失失效。
设置了存储时间后,此时设置Cookie的数据将保存在硬盘中,不同的浏览器存放的具体位置是不一样的。
谷歌浏览器查看cookie的位置:
“菜单-设置-显示高级设置-内容设置”:
单击上图中的“内容设置”,弹出如下界面:
单击上图的红框部分,弹出如下界面:
success.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>success.
</body>
</html>
如果登陆成功,就调到这个页面。
error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>error.
</body>
</html>
运行程序,当输入正确的用户名密码进行登录,并勾选“记住密码”后,下次再回到登录界面,就是下面的这个样子:
以上所述是小编给大家介绍的JavaWeb 中Cookie实现记住密码的功能示例网站的支持!
来源:http://blog.csdn.net/justdoit_potato/article/details/73739529


猜你喜欢
- 线程同步的概念由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也会带来访问冲突的问题:举例:public class Runn
- 第一种方式:使用@Param注解方式此种方式用法是我们在接口中写方法的参数时,在每个参数的前面加上一个@Param注解即可。该注解有一个va
- Android 自定义按钮点击事件和长按事件对比一个按钮同时实现点击和长按事件,有时候会有冲突,我们针对这一现象来自定义按钮来区
- 最近做MVC网站时刚好用到,用以提供一个完整的文件夹并压缩下载,正好做个笔记。拷贝文件夹的所有内容到另一个文件夹内:public stati
- @PropertySource注解是Spring用于加载配置文件,默认支持.properties与.xml两种配置文件。@PropertyS
- 需求业务需要导出的Excel的数字内容保留两位小数,并且四舍五入代码实现百度一圈所抄袭的代码DecimalFormat dfScale2 =
- Java float和double精度范围大小要想理解float和double的取值范围和计算精度,必须先了解小数是如何在计算机中存储的:举
- 本文实例讲述了Android编程调用Camera和相册功能。分享给大家供大家参考,具体如下:xml:<LinearLayout xml
- 本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下import java.awt.BasicStroke;imp
- 0.解释器(Interpreter)模式定义 :给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。
- 一,背景之所以会想到一个服务同时使用eureka和nacos,是因为遇到一个需求,配置数据是存储在nacos的配置中,然后使用该配置的服务却
- 本文实例讲述了java实现一次性压缩多个文件到zip中的方法。分享给大家供大家参考,具体如下:1.需要引入包:import java.io.
- 1.启动项目的时候报错1.Error starting ApplicationContext. To display the auto-co
- 1、使用场景 因为最近项目需要国际化,需要能够支持多种国际化语言,目前需要支持三种(法
- float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。而且使用BigDe
- 目前很多网页都有滑动验证,目的就是防止不良爬虫扒他们网站的数据,我这次本着学习的目的使用Java和selenium学习解决滑动验证的问题,前
- 前言在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决。对话框
- 在开发程序的过程中,难免少不了写入错误日志这个关键功能。实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的
- 前面阿粉说了关于 MD5 加密算法,还有 RSA 加密算法的实现,以及他们的前世今生,今天阿粉在来说一下这个关于 DES 加密算法,又是怎么
- 前言Date 类Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。构造方法