如何使用Cookie实现选定时间免登录

真实模拟实现Cookie实现选定时间登录,需要前后端连接

1,创建数据库,创建一个school表为例,添加一条数据

2,用IDEA用来接收mysql的数据,需要用到mysql的jar包,使用mevan的话导入sql的依赖就可以

3,创建uitl包新建DBUtil类用来连接数据库

package uitl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBUtil {
    /**
     * 获取数据库连接
     */
    public static Connection getConn(){
        Connection conn=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8&userSSL=false&serverTimezone=Asia/Shanghai", "root", "root");

        } catch (Exception e) {
           e.printStackTrace();
        }
        return conn;
    }
    public static void closeAll(Connection conn, Statement st, ResultSet rs){
        try {
            if (rs!=null){
                rs.close();
            }
            if (st!=null){
                st.close();
            }
            if (conn!=null){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

4,创建实现类User用来存储数据库的数据

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String username;
    private String password;
}

5,创建LoginServlet类用来接收和传递数据

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserDao userDao = new UserImpl();
        User user = userDao.User(username, password); // 获取用户对象
        String autoLoginPeriod = request.getParameter("autoLoginPeriod");
        int period = Integer.parseInt(autoLoginPeriod);
         if (user != null) {
            // 设置Cookie
            Cookie cuser = new Cookie("username", URLEncoder.encode(user.getUsername(), "utf-8"));
            cuser.setMaxAge(period);
            response.addCookie(cuser);
            response.sendRedirect("main.jsp");
         } else {
            response.sendRedirect("login.html");
        }
    }


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

String autoLoginPeriod = request.getParameter("autoLoginPeriod");

这行代码用于从 HTTP 请求中获取一个参数值。具体来说,它从当前的 HTTP 请求中查找名为 "autoLoginPeriod" 的参数,并将该参数的值赋给字符串变量 autoLoginPeriod

这个过程通常在处理表单提交、URL 参数或者 AJAX 请求时发生。例如,你可能在 HTML 表单中有一个输入字段,其名称为 "autoLoginPeriod",用户填写后提交表单。服务器端的代码会捕获这个表单数据,然后通过 request.getParameter("autoLoginPeriod") 来访问它。

cuser.setMaxAge(period);这行代码用于设置 Cookie 的生存时间。

setMaxAge 方法接受一个整数参数 period ,它指定了 Cookie 在客户端浏览器中的存活时间(以秒为单位)。

如果 period 的值为正数,那么 Cookie 将在指定的秒数后过期。

如果 period 的值为 0 ,表示删除 Cookie 。

如果 period 的值为负数,通常表示 Cookie 在浏览器会话结束时过期(即关闭浏览器时 Cookie 被删除)。

6,在webapp下新建login.html文件,布置前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/loginServlet" method="post">
用户名:<input type="text" name="username" id="username"  placeholder="请输入用户名"><br>
密码:<input type="text" name="password" id="password" placeholder="请输入密码"><br>
    免登录时间段:
    <select name="autoLoginPeriod">
        <option value="0">不免登录</option>
        <option value="3600">1小时</option>
        <option value="86400">1天</option>
        <option value="604800">1周</option>
        <option value="2592000">1个月</option>
<input type="submit" value="登录">
    </select><br>
</form>

<a href="enroll.html">注册新用户</a>
</body>

</html>

7,新建CookieTime.jsp,定义规则

<%@ page import="entity.User" %>
<%@ page import="java.net.URLEncoder" %><%--
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
    String username = null;
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        for (int i = 0; i < cookies.length; i++) {
            if (cookies[i].getName().equals("username")) {
                username = cookies[i].getValue();
            }
        }
    }
    %>
你好, <%=URLEncoder.encode(username,"utf-8")%>
<%--${user.username},登录成功。 <a href="/logOut">安全退出</a>--%>
</body>
</html>

以上就能实现登录页面选定时间段实现免登录了

Cookie存在于客户端,是一段文本,所以可以通过Cookie来访问用户的数据等。

Cookie是有时间时效的,和Session的区别在于:

ession的值是对象类型的,Cookie是文本类型的,Session更安全。

Session浏览器关闭就失效,Cookie有它的有效时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值