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. 运行结果

跳转到成功页面

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


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

  • 6
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 使用cookie登录的原理是在用户登录成功后,将用户登录信息保存在cookie中,然后在用户下一次访问网站时,通过读取cookie中的信息来判断用户是否已经登录过,如果已经登录过,则直接跳转到用户的个人主页,否则跳转到登录页面。在JavaWeb中,可以通过使用Servlet或者JSP实现cookie的操作,具体实现方式可以参考相关的教程和文档。 ### 回答2: Java Web应用程序使用Cookie(小型文本文件)来实现无需登录的功能。当用户进行身份验证后,应用程序将将用户的标识符和其他信息设置为cookie值,并将其发送回用户的Web浏览器。Cookie存储在用户的计算机上,并在用户访问应用程序时随同请求一起发送。 应用程序可以在访问时读取cookie值,以便自动识别和身份验证用户。如果cookie值过期,则用户需要重新登录。 为了实现无需登录,应用程序需要在用户第一次登录时设置cookie值。通常,应用程序将用户的身份验证信息保存在数据库中,并在成功验证后创建并设置cookie值。在随后的请求中,应用程序将读取cookie值,并将用户作为已验证用户处理。这使得用户无需在每次访问应用程序时都进行身份验证。 然而,使用cookie实现无需登录功能也存在一些安全风险。黑客可以轻松地访问cookie值,并使用它们冒充用户身份。因此,应用程序需要采取措施来保护cookie值,例如通过加密和限制cookie的生命周期。此外,应用程序应该注意避免使用敏感信息作为cookie值。 ### 回答3: cookie是一种在客户端存储数据的机制,使用它可以帮助我们实现登录的功能。在JavaWeb中,我们可以使用Cookie类的实例对象来创建、发送和接收cookie数据。 首先,在用户登录成功时,我们可以将用户登录信息存储到cookie中,以便下次用户访问网站时可以快速进行身份验证。这可以通过以下代码实现: ```java Cookie userCookie = new Cookie("user", "username"); userCookie.setMaxAge(60*60*24*30); //设置cookie有效期为30天 response.addCookie(userCookie); //将cookie发送给客户端 ``` 这段代码创建了一个名为“user”的cookie,并将其值设置为“username”,有效期为30天。然后,我们将该cookie发送给客户端(即用户的浏览器)。 接下来,在用户下次访问网站时,我们可以从请求中获取cookie并进行身份验证。这可以通过以下代码实现: ```java Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("user")) { String username = cookie.getValue(); //在这里进行身份验证等操作 break; } } } ``` 这段代码首先通过获取请求的cookie数组,然后遍历数组寻找名为“user”的cookie。如果找到了该cookie,则获取其值并进行身份验证等操作。 当然,我们还需要注意一些安全问题,例如将用户密码等敏感信息存储到cookie中是不安全的。此外,如果cookie被篡改了,也可能导致身份验证失败。因此,在实现登录功能时,我们需要进行一定的安全性考虑和防范措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值