jsp中使用cookie+session实现自动登录功能

1、需求分析

在实际运用中的用户登陆网站中,多提供有记住密码和自动登陆等功能,方便同一用户短时间内不用再输入用户名和密码等繁琐信息可以快捷登陆。本案例将模拟用户自动登陆功能。

1.2、设计思路(实现原理)
  1. 创建login.html页面,编写用户登陆界面
  2. 创建Demo6类, 编写用户登陆判断逻辑处理和自动登陆业务,
  3. 在web.xml中配置初始化参数和类的映射
    2、作业要求

2.1、启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter05/ login.html,访问浏览器显示的结果如下图所示:

2.2、在输入框随机输入用户名,如”zhangsan”,第一次不选中自动登陆框,然后点击提交按钮,浏览器显示的结果如下图所示:

2.3、则用户就会登陆网站了,当点击上图页面中的退出按钮就又返回到了初始登陆页面,如下所示;

2.4、可以在不输入用户名的情况下点击提交按钮,查看浏览器页面出现以下结果:

提醒用户输入用户名(因为还没有选中自动登陆功能),2秒后自动跳转到登陆页面,让用户必须登陆才可以;

2.5、第二次,在登陆界面随机输入用户名,如”zhangsan”,在勾选自动登陆框,点击提交按钮,浏览器显示结果如下:

2.6、

则用户就会登陆网站了,当点击上图页面中的退出按钮就又返回到了初始登陆页面,这次不用输入用户名(必须在退出后的10秒内,因为代码中设置cookie的有效期是10秒钟),再次直接点击提价按钮,浏览器显示结果如下(用户实现了自动登陆功能):

问题

这里有个缺点就是,你登录进的时候kookie就生效了只有十秒的有效期,所以你在这10秒内退出然后再登录页面直接点登录就可以了,

解决方案

你只需要再写一个类,这个类处理你退出的时候设置cookie的时间为10秒过期就行了.欢迎大佬们在评论区留言

3、代码
login.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="Demo6" method="post">用户名: <input type="text" name="username" ><br>自动登录: <input type="checkbox" name="remember"><br><input type="submit" value="登录">
</form>
</body>
</html>

demo6Servlet.java
package com.gued.w4.anli54;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;@WebServlet("/Demo6")
public class Demo6Servlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String username=request.getParameter("username");String remember=request.getParameter("remember");System.out.println(remember);//创建或者获取用户的Session对象HttpSession session1 = request.getSession();Object remember1 = session1.getAttribute("remember1");if (remember==null){if(remember1!=null){String url="/test01/login.html";response.getWriter().println("您以登录欢迎您"+"<a href='"+url+"'>退出</a>");}else {if(username.equals("zhangsan") ){String url="/test01/login.html";response.getWriter().println("您以登录欢迎您"+"<a href='"+url+"'>退出</a>");}else {response.getWriter().write("请输入用户名,页面2秒后调转");response.setHeader("Refresh","2;url=/test01/login.html");}}}else {if (username.equals("zhangsan")){String url="/test01/login.html";response.getWriter().println("您以登录欢迎您"+"<a href='"+url+"'>退出</a>");}session1.setAttribute("remember1",remember);//创建Cookie存放Session的标记号Cookie cookie = new Cookie("JSESSIONID", session1.getId());cookie.setMaxAge(10);cookie.setPath("/test01");response.addCookie(cookie);}}
}

我的大学:梦开始的地方

https://www.bilibili.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/591522.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux上安装DM8(达梦数据库),SpringBoot集成达梦

1.达梦数据库在Linux上的安装 官方手册:https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html 1.1下载安装包 官网:https://www.dameng.com/list_103.html 点击”服务与合作”--> “下载中心” 这里选择对应的cpu和操作系统(举个例子:windows版本…

nvme协议学习总结

一、nvme命令 1 nvme在pcie基础上的协议&#xff0c;与PCIE配合&#xff0c;实现高效传输。 2 nvme命令主要分IO命令和admin命令。 3 一个NVME CMD执行流程&#xff1a; step1&#xff1a;host把cmd写入SQ queue中&#xff1b; step2&#xff1a;host远端更新Device&#x…

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件&#xff0c;反应电脑存储情况&#xff1a; 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

19.网络测试

考试频率低&#xff1b;主要是上午题&#xff1b; 主要议题&#xff1a; 1.网络全生命周期测试策略 2.网络设备评测指标 吞吐量&#xff1a;单位时间内完成xxxx的数量&#xff1b;如&#xff1a;不丢包情况下&#xff0c;系统最大的包转发速度&#xff1b; 丢包率&#xff…

2024-HW --->SSRF

这不是马上准备就要护网了嘛&#xff0c;如火如荼的报名ing&#xff01;&#xff01;&#xff01;那么小编就来查缺补漏一下以前的web漏洞&#xff0c;也顺便去收录一波poc&#xff01;&#xff01;&#xff01;&#xff01; 今天讲的主人公呢就是SSRF&#xff0c;以前学的时候…

openlayers 入门教程(九):overlay 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

012_control_flow_in_Matlab中的控制流

Matlab中的控制流 虽然&#xff0c;我们说Matlab中的计算是向量化的&#xff0c;但是在某些情况下&#xff0c;作为一个“程序设计语言”&#xff0c;Matlab也提供了一些控制流结构&#xff0c;来帮助我们实现一些复杂的逻辑。 我会在介绍控制流的时候&#xff0c;提醒如何用…

BCLinux-for-Euler配置本地yum源

稍微吐槽一句…… 在这片土地上&#xff0c;国产化软件的大潮正在滚滚而来&#xff0c;虽然都不是真正意义上的国产化&#xff0c;但是至少壳是国产的~~~ 之前使用的Centos7的系统&#xff0c;现在都要求统一换成BCLinux-for-Euler。说实话换了之后不太适应&#xff0c;好多用习…

【C语言】linux内核pci_register_driver

一、注释 以下是对源代码中英文注释的中文翻译&#xff0c;可能会略去一些编程上的专有词汇&#xff08;例如函数名、类型名等&#xff09;&#xff0c;以使翻译更易理解。 // drivers\pci\pci-driver.c /*** __pci_register_driver - 注册一个新的PCI驱动* drv: 需要注册的驱…

二分答案(砍树,借教室)

二分的两种情况附代码&#xff1a; 二分查找条件&#xff1a;单调&#xff0c;二段性 例题1&#xff1a;P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 上代码&#xff1a; #include<bits/stdc.h> using namespace std; const …

aesara,一个不可思议的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个不可思议的 Python 库 - aesara Github地址&#xff1a;https://github.com/aesara-devs/aesara Aesara是一个高效的符号计算库&#xff0c;用于深度学习和数值计算&#xff0c;它允许开发者以…

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…