014.采用Cookie和Session完成,登录时间不能存储在cookie中(判断是不是第一次登陆)

014.采用Cookie和Session完成,登录时间不能存储在cookie中(判断是不是第一次登陆)

 

 

package com.session.homework;

import cn.hutool.core.date.DateUtil;
import com.sun.org.apache.bcel.internal.generic.NEW;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


@WebServlet("/sessionHomework")
public class SessionHomework extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        /**
         * 1.解决中文乱码
         */
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        /**
         * 1.使用Hutool工具类获取当前时间
         * 2.将时间格式化成对应的yyyy年MM月dd日 HH时mm分ss秒
         * 3.使用utf-8编码  timeFormatDateCoded= URLEncoder.encode(formatDate,"utf-8");
         * 4.使用utf-8解码  timeFormatDateDecode = URLDecoder.decode(value,"utf-8");
         */
        Date date = DateUtil.date(System.currentTimeMillis());
        String formatDate = DateUtil.format(date, "yyyy年MM月dd日 HH时mm分ss秒");
        String timeFormatDateCoded = URLEncoder.encode(formatDate, "utf-8");
        String timeFormatDateDecode = URLDecoder.decode(formatDate, "utf-8");
        /**
         * 1.登录时间存储在session中  timeFormatDate
         * 2.往session中装入属性  key(String) : value(Object))
         */
        HttpSession session = req.getSession();
        session.setAttribute("time", timeFormatDateDecode);
        /**
         *2.Java获取当前时间到凌晨12点剩余秒数
         *   2.1 cal.set(Calendar.HOUR,0);此方法如果当前时间超过中午12点,则返回的结果是当前时间到明天中午十二点的秒数,如果当前时间不超过中午12:00,则返回的结果是到第二天凌晨的秒数
         *   2.2 cal.set(Calendar.HOUR_OF_DAY, 0);无论当前时间是否超过中午12:00,获取的都是到第二天凌晨的秒数。
         *   2.3 Calendar.HOUR:12小时制。
         *   2.4 Calendar.HOUR_OF_DAY :24小时制。
         */
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        long seconds = (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
        /**
         * 1.设获取HttpSession对象:HttpSession session = req.getSession()
         * 2.第一次访问会默认添加一个cookie,名称JSESSIONID,是隐形的,是被req.getSession()底层封装的,所以我们看不到,此时cookie的生命周期为浏览器关闭后就消失
         * 3.为了解决2中(cookie的生命周期为浏览器关闭后就消失)可以new一个cookie,名称也是JSESSIONID,会覆盖默认创建的cookie
         * 4.Cookie生存时间介绍:持久化存储期限以秒为单位
         * 5. jsessionIdCookie.setMaxAge(24*60*60);设置了jsessionIdCookie的存活时间是24小时
         * 6.优化:jsessionIdCookie到当天24点需要失效,因为已经到了第二天了,浏览器再次访问,应该返回 首次访问
         */
        Cookie jsessionIdCookie = new Cookie("JSESSIONID", session.getId());
        jsessionIdCookie.setMaxAge((int) seconds);
        resp.addCookie(jsessionIdCookie);
        /**
         * 1.对jsessionIdCookie进行判断
         * 2.获取所有的jsessionIdCookie值
         * 3.若jsessionIdCookie为空,说明第一次访问
         */
        Cookie[] jsessionIdCookies = req.getCookies();
        if (jsessionIdCookies != null)
        {
            resp.getWriter().write("欢迎回来,您上次访问时间为:" + session.getAttribute("time"));
        }
        else
        {
            resp.getWriter().write("您好,欢迎您首次访问");
        }
    }
}

 

上一篇:013.Java获取当前时间到凌晨12点剩余秒数


下一篇:java任意一年2月份有多少天