塘沽网络公司seo专业术语
目录
思路
index.jsp
Java
session&cookie理论文章参见:会话管理-帮你搞懂cookie&session(Java版本)_java cookie 有效期会话-CSDN博客
1.cookie记录上一次的访问时间
思路
本质上就是记录本次的访问请求时间并且创建一个具有一定寿命的cookie;然后遍历网站中所有的cookies,然后筛选出在寿命范围内(就是尚且存活)且距离本次访问时间最近的一次请求,如果没有,就会显示第一次访问。
package com.qcby.cookieLoginTest;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;@WebServlet(name="lateTime",urlPatterns ="/visit")
public class LastTimeTest extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应内容类型response.setContentType("text/html;charset=UTF-8");// 获取当前时间Date now = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 检查Cookie中是否已经存在上次访问时间String lastVisitTime = "首次访问";Cookie[] cookies = request.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {if ("lastVisit".equals(cookie.getName())) {// 对Cookie值进行解码lastVisitTime = java.net.URLDecoder.decode(cookie.getValue(), "UTF-8");break;}}}// 创建一个新的Cookie来记录当前时间String encodedTime = URLEncoder.encode(sdf.format(now), "UTF-8"); // 对Cookie值进行编码Cookie lastVisitCookie = new Cookie("lastVisit", encodedTime);lastVisitCookie.setMaxAge(60); // 设置Cookie有效期为一分钟response.addCookie(lastVisitCookie);// 输出响应页面try (PrintWriter out = response.getWriter()) {out.println("<html><body>");out.println("<h1>欢迎访问!</h1>");out.println("<p>当前时间:" + sdf.format(now) + "</p>");out.println("<p>上次访问时间:" + lastVisitTime + "</p>");out.println("</body></html>");}}
}
得到结果:
第二次访问:
2.cookie实现自动登录
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Login</title>
</head>
<body>
<form action="login" method="post">用户: <input type="text" name="username"/><br>密码: <input type="password" name="password"/><br><input type="checkbox" value="1" name="auto"/> 一分钟内自动登录<br><input type="submit" value="登录"/>
</form>
</body>
</html>
Java
package com.qcby.cookieTest;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;/*** 模拟自动登陆方法*/
@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取用户端提交的表单信息String username = request.getParameter("username");String password = request.getParameter("password");String auto = request.getParameter("auto");// 统一设置response响应格式及编码response.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("UTF-8");// 判断是否提交用户信息if(username == null && password == null && auto == null){// 用来接收cookie的value信息String cookieValue = null;// 获取用户端cookiesCookie[] cookies = request.getCookies();// 如果cookies不为null 尝试获取name为txjavac的cookie的valueif(cookies != null){for(Cookie ck : cookies){if(ck.getName().equals("txjavac")){cookieValue = ck.getValue();}}}// 如果没有获取到cookie的value 返回信息if(cookieValue == null){response.getWriter().write("您还未进行登陆,请进行登陆!!!");return;}else{// 如果获取到// 对该信息进行解码BASE64Decoder decoder = new BASE64Decoder();cookieValue = new String(decoder.decodeBuffer(cookieValue));// 对解码后的字符串进行切分String[] split = cookieValue.split(":");// 获取用户名和密码username = split[1];password = split[2];// 创建用户对象User user = new User(username,password);// 获取sessionHttpSession session = request.getSession();// 把用户对象存储到session中session.setAttribute("user",user);// 返回内容response.getWriter().write("尊敬的"+username+",欢迎您!!!");return;}}// 判断用户名或密码是否正确if(username!=null && password!=null && username.equals("admin") && password.equals("txjava")){// 创建用户对象User user = new User(username,password);// 获取session会话对象HttpSession session = request.getSession();// 把用户存入session中session.setAttribute("user",user);// 用户名密码正确的话,判断是否勾选了自动登陆if(auto != null && auto.equals("1")){// 拼接存储于cookie的value值String value = "txjava:" + username + ":" + password + ":" + 60;// 进行BASE64编码BASE64Encoder encoder = new BASE64Encoder();value = encoder.encode(value.getBytes());// 创建cookie并且设置一天失效后添加到responseCookie cookie = new Cookie("txjavac",value);cookie.setMaxAge(24*3600);response.addCookie(cookie);}response.getWriter().write("尊敬的"+username+",欢迎您!!!");return;}else {response.getWriter().write("用户名或密码错误!!!");return;}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}
第一次登录或是没有勾选自动登录选项进入这个路径:
输入密码正确且勾选上后:
在一分钟内再进入这个路径,就可以自动登录(如果没勾选,那么后面进这个还是会显示未登录):