当前位置: 首页 > news >正文

sessioncookie 2.0(示例篇)

目录

1.cookie记录上一次的访问时间

思路

 2.cookie实现自动登录

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;

    @Override
    protected 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"/>&nbsp;一分钟内自动登录<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;
            // 获取用户端cookies
            Cookie[] cookies = request.getCookies();
            // 如果cookies不为null  尝试获取name为txjavac的cookie的value
            if(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);
                // 获取session
                HttpSession 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并且设置一天失效后添加到response
                Cookie 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);
    }
}

第一次登录或是没有勾选自动登录选项进入这个路径:

输入密码正确且勾选上后:

 

在一分钟内再进入这个路径,就可以自动登录(如果没勾选,那么后面进这个还是会显示未登录):

相关文章:

  • 数据结构与算法-图论-最短路和其他的结合
  • 学睿德毅AI 赋能教育拓展短视频创作边界
  • 基于Electron的应用程序安全测试基础 — 提取和分析.asar文件的案例研究
  • 【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别
  • 深入xtquant:Python量化交易的桥梁与核心
  • 网络安全虚拟化组成
  • 散户情绪周期模型(情绪影响操作)
  • 16.1 LangChain 表达式语言(LCEL)深度解析:构建灵活高效的大模型应用流水线
  • Nginx处理http的流程
  • 【AI+智造】基于SKF IMAX-16+PT1000与Odoo18工业物联网架构智慧生产诊断系统集成方案
  • Prompt Engineering for Large Language Models
  • 软件工程:软件需求之需求编写规则
  • 【六祎 - Note】Redis缓存设计模型,备忘录;
  • WPF-ReactiveUi
  • .bash_profile一些笔记
  • 在kubernetes集群中持续压测 SpringCloud 应用,pod 的 memory cache 持续增长问题
  • Android系统的“层次”结构
  • Lucene硬核解析专题系列(一):Lucene入门与核心概念
  • LeetCode 热题 100_有效的括号(69_20_简单_C++)(栈;栈+哈希表(建立左右括号的对应关系))
  • [密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践
  • wordpress 文章格式/谷歌seo是做什么的
  • 网站设计毕业论文的模板咋写/如何让百度收录
  • 郑州网站建设 天强科技/免费网站搭建
  • 长沙网站建设服务商/爱站网 关键词挖掘工具
  • 做网站的计划/外链下载
  • 宁波住房与城乡建设部网站/郑州竞价托管