Javaweb学习 对cookie的浅理解和应用

专业解释:

Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
链接:https://www.jianshu.com/p/6fc9cea6daa2

生命周期:

Cookie 的生命周期可以通过两种方式定义:

  • 会话期 Cookie 是最简单的 Cookie:浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期Cookie不需要指定过期时间(Expires)或者有效期(Max-Age)。需要注意的是,有些浏览器提供了会话恢复功能,这种情况下即使关闭了浏览器,会话期Cookie 也会被保留下来,就好像浏览器从来没有关闭一样,这会导致 Cookie 的生命周期无限期延长。
  • 持久性 Cookie 的生命周期取决于过期时间(Expires)或有效期(Max-Age)指定的一段时间。

--------------------------------------------------------------------------------------------------------------------------------

由此来写一个网页。当该浏览器第一次访问,则显示“欢迎第一次访问该网页”,否则显示上一次访问该网页时间。

如果第一次访问,先创建一个日期对象,将日期转换为文本格式 (要注意其中 空 格 不能在浏览器中直接解析,要通过编码为"utf-8" 解码)

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String sdf_date = sdf.format(date);
 sdf_date= URLEncoder.encode(sdf_date,"utf-8");

 然后创建新的cookie对象 将其key设置为“lastTime” value为此时时间

sexMaxAge()设置存储到销毁的时间

setValue()将value值存入

response.addCookie(cookie)将cookie添加到服务器端

Cookie cookie = new Cookie("lastTime",sdf_date);
cookie.setMaxAge(60*60*24*30);
cookie.setValue(sdf_date);
response.addCookie(cookie);
response.getWriter().write("欢迎第一次访问该网页!");

如果不是第一次访问

先设置一下浏览器编码 获取当前cookie数组中所有值 然后通过if条件语句判断

//浏览器编码
response.setContentType("text/html;charset=utf-8");
//浏览器里面能永久存储的一种数据
Cookie[] cookies = request.getCookies();
boolean flag = false;

 

 获取lastTime的value值 解码后 打印到浏览器上

String name = cookie.getName();
if ("lastTime".equals(name)) {
       //获取value值
       String value = cookie.getValue();
       //解码
       value= URLDecoder.decode(value,"utf-8");
       response.getWriter().write("欢迎回来!上次访问时间为" + value);

之后再次更新当前新的访问时间 不赘述

再次访问截图:

 

doPost中完整代码:

//浏览器编码
        response.setContentType("text/html;charset=utf-8");
        //浏览器里面能永久存储的一种数据
        Cookie[] cookies = request.getCookies();
        boolean flag = false;

        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                if ("lastTime".equals(name)) {
                    //获取value值
                    String value = cookie.getValue();
                    //解码
                    value= URLDecoder.decode(value,"utf-8");
                    response.getWriter().write("欢迎回来!上次访问时间为" + value);

                    //获取当前登录时间
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String sdf_date = sdf.format(date);
                    //编码
                    sdf_date= URLEncoder.encode(sdf_date,"utf-8");
                    //设置存储时间
                    cookie.setMaxAge(60*60*24*30);
                    //设值
                    cookie.setValue(sdf_date);
                    response.addCookie(cookie);
                    //编码
                    value= URLDecoder.decode(value,"utf-8");

                    flag=true;
                    break;
                }
            }
        }
        if(cookies==null||cookies.length==0||flag==false){
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String sdf_date = sdf.format(date);

            sdf_date= URLEncoder.encode(sdf_date,"utf-8");
            Cookie cookie = new Cookie("lastTime",sdf_date);
            cookie.setMaxAge(60*60*24*30);


            cookie.setValue(sdf_date);
            response.addCookie(cookie);
            response.getWriter().write("欢迎第一次访问该网页!");
        }
 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值