Javaweb | cookie实现两周内免登录

目录

1. 问题

2.解决思路

3. 解决步骤

3.1 编写登录页面(lg.jsp)

3.2 编写一个登录成功页面(success.jsp)

3.3 编写登录失败页面(fail.html)

3.4 写一个cookie的类用来存储从页面获取的用户信息(Login.java)

3.5 在登录页面(lg.jsp)添加检索Cookie是否存在

4. 运行结果


1. 问题

在用户登陆界面中,输入账号和密码,登陆成功时,进入欢迎页面。在登录时,如果勾选了两周内免登录,则在下次登录时,可以不用输入密码,直接跳转到成功页面,从而实现免登录功能。

2.解决思路

当用户登陆时勾选了免登录按钮,在cookie的处理逻辑中就会将从登录页面中获取到的用户信息存储在cookie中,同时可以设置cookie的有效时间等。当用户在cookie有效时间内再次登录,在登陆页面就会获取cookie,查看其中是否有之前储存的数据,如果有就会直接跳转到成功页面。

3. 解决步骤

3.1 编写登录页面(lg.jsp)

这里的两个文本框中的<%=username%>和<%=password%>后面会提到,是在再次登录时,从cookie中获取信息自动填充的。

<%@ page import="java.io.PrintWriter" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %><%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2021/11/4
  Time: 21:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>登陆页面</title>
    <style>
        .lg {
            margin-top: 100px;
        }

        body {
            background: aliceblue;
        }
    </style>
</head>
<body>
<div class="lg">
    <form action="lg" method="post">
        <table border="1" width="30%" align="center">
            <caption>用户登录</caption>
            <tr>
                <td><label for="username">用户名:</label></td>
                <td><input type="text" name="username" placeholder="请输入用户名" id="username" value="<%=username%>"></td>
            </tr>
            <tr>
                <td><label for="password">密码:</label></td>
                <td><input type="password" name="password" placeholder="请输入密码" id="password" value="<%=password%>"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input name="twoDays" type="checkbox" value="ok">两天内免登陆</td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="登陆"></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

3.2 编写一个登录成功页面(success.jsp)

<%@ page import="java.io.PrintWriter" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %><%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2021/11/4
  Time: 21:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>登陆页面</title>
    <style>
        body {
            background: aliceblue;
        }
    </style>
</head>
<body>
登陆成功!!
</body>
</html>

3.3 编写登录失败页面(fail.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fail</title>
</head>
<body>
用户名或密码错误,请
<a href="lg.jsp">重新登陆</a>
</body>
</html>

3.4 写一个cookie的类用来存储从页面获取的用户信息(Login.java)

当我们选择“免登录”在按下登录按钮后,在cookie处理这块就会判断从登录页面获取的twodays的参数值是不是"ok",如若是,被获取的用户信息表单就利用cookie将保存起来了。

这里可以设置cookie的有效时间,便于检查这里设置的是10秒。

@WebServlet("/lg")
public class Login extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String twoDays = request.getParameter("twoDays");
        PrintWriter out = response.getWriter();

        //查看用户名和密码是否正确,我这里对用户名和密码没有强用要求,只要输入了就行,可以自己改
        if (username != null && password != null) {
            if ("ok".equals(twoDays)) {
                //将用户信息存储到cookie中,并且关联路径和设置有效时间
                Cookie cookie1 = new Cookie("username", username);
                Cookie cookie2 = new Cookie("password", password);
                cookie1.setPath("/");
                cookie2.setPath("/");
                cookie1.setMaxAge(10);//10秒
                cookie2.setMaxAge(10);
                //服务器发送cookie给客户端浏览器
                response.addCookie(cookie1);
                response.addCookie(cookie2);
            }
            //跳转到主页
            response.sendRedirect("success.jsp");
        } else {
            //跳转到登陆失败页面
            response.sendRedirect("fail.html");
        }
    }
}

3.5 在登录页面(lg.jsp)添加检索Cookie是否存在

如果cookie已经保存过了,那么当用户在cookie的有限时间内在登陆时,应该自动填充账号密码,并且跳转到成功页面。

上面提到的<%=username%>和<%=password%>是在这里得到的,获取一个Cookie数组,检索一下当前账号是否已经有保存了,如果有的话,那if(cookies!=null&&cookies.length>0)就会成立,在数组中找到我们需要的账号和密码,自动填充到两个文本框中,接下来就会利用request.getRequestDispatcher("success.jsp").forward(request, response)跳转到成功页面。

<%
    //获取cookie
    Cookie[] cookies = request.getCookies();
    //取出cookie中的值
    String username = "";
    String password = "";
    if (cookies != null && cookies.length > 0) {
        for (Cookie cookie : cookies) {
            String cookieName = cookie.getName();
            if ("username".equalsIgnoreCase(cookieName)) {
                username = cookie.getValue();
            }
            if ("password".equalsIgnoreCase(cookieName)) {
                password = cookie.getValue();
            }
            if ("username".equalsIgnoreCase(cookieName)){
                request.getRequestDispatcher("success.jsp").forward(request, response);
            }
        }
    }
%>

4. 运行结果

跳转到成功页面

 再次访问登陆界面时,就会跳转到成功页面。


如果有错误或者有疑问,欢迎一起交流~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值