真实模拟实现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有它的有效时间。