会话技术——cookie

一.cookie相关知识

1.会话技术

让服务能够识别到已经访问过的客户端

2.cookie

客户端会话技术,服务器生成一段文本信息,发给客户端,客户端下次访问的时候带上这段文本信息,服务器就会识别到

3.cookie机制

用户第一次访问应用时,服务器生成一个cookie,通过http响应返回给浏览器,是通过响应头Set-Cookie来传递的。浏览器下次访问同一个网站时会自动携带cookie信息,通过请求头携带cookie,服务端如果能够获取到cookie,就可以识别到这个用户

4.cookie的创建和发送

可以同时创建两个cookie

二.使用cookie

1.创建包,其下创建类,生成cookie,具体代码如下

package com.hhh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //生成cookie,直接new一个对象,cookie本身是一键值对,里面存两值
        Cookie cookie=new Cookie("mycookie","hhh");

        //发送给客户端,通过resp对象发送
        resp.addCookie(cookie);
        resp.getWriter().print("send cookie success");

    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

2.在web.xml文件中配置servlet

<servlet>
        <servlet-name>MyCookie</servlet-name>
        <servlet-class>com.hhh.cookie.MyCookie</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyCookie</servlet-name>
        <url-pattern>/cookie</url-pattern>

3.启动tomcat,按F12查看,其中Set-Cookie中的值就是服务器返回给我们的cookie值

 4.再次请求,第一次访问生成cookie,第二次访问浏览器时就会带上cookie值

 5.另外创建一个类用来展示,第一次访问和第二次访问浏览器时cookie的变化

1.创建类,代码如下

package com.hhh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().print("Second");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

2.配置servlet

<servlet>
        <servlet-name>cookieDdemo</servlet-name>
        <servlet-class>com.hhh.cookie.CookieDemo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>cookieDdemo</servlet-name>
        <url-pattern>/cookie1</url-pattern>
    </servlet-mapping>

3.启动tomcat

1)第一次请求设置cookie

 2)第二次访问带上cookie

三.cookie的获取

1.在CookieDemo.java文件中演示如何获取cookie

1.具体代码如下

package com.hhh.cookie;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取cookie,cookie通过请求头传递,就通过请求对象去获取
        Cookie[] cookies = req.getCookies(); //获取cookie的数组
        //循环cookie的数组,获取cookie
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName()+"--"+cookie.getValue());
            
        }

        resp.getWriter().print("Second");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

2.启动tomcat

 3.查看idea的server

第一个cookie值为idea自己生成的,第二个cookie值是设置的

 4.cookie的有效时间

1.默认情况,当浏览器关闭当前网站时,cookie的数据就会被销毁

2.当cookie的maxAge属性是整数,单位为秒,cookie会被持久化到本地,在指定的时间内有效,即使关闭浏览器也是有效的

3.maxAge为负数(默认值,浏览器关闭后当前网站的cookie数据就会被销毁)

4.maxAge为0,表示立即删除当前cookie

5.cookie的特点

1.最大能存4k的数据,同一个网站存20个

2.存在客户端,不安全,存不敏感信息

四.Cookie案例——记住访问时间

1.在CookieDemo.java文件中演示,具体代码如下

package com.hhh.cookie;

import javax.servlet.ServletException;
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.text.SimpleDateFormat;
import java.util.Date;

public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //先获取cookie,第一次访问生成cookie,第二次访问时如果cookie里头包含时间(lastTime=2022-9-22),就证明登录过
        Cookie[] cookies = req.getCookies();
        if(null!=cookies){
            for (Cookie cookie : cookies) {
                if("lastTime".equals(cookie.getName())){
                    //有一个符合条件的cookie,该返回
                    //中文设置
                    resp.setContentType("text/html;charset=utf-8");
                    resp.getWriter().print("欢迎回来,上次访问时间:"+cookie.getValue());
                    return ;
                }

            }
        }
        //循环跑完没有符合条件的结果就证明你是第一次访问
        //第一次访问,就需要去创建一个cookie
        //新建时间, 日期格式化
        Date date=new Date();
        //注意这里的时间格式,dd和HH中间不要有空格,有空格报错
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
        String format = sdf.format(date);
        Cookie cookie=new Cookie("lastTime",format);
        cookie.setMaxAge(180);
        resp.addCookie(cookie);
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().print("欢迎访问");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

2.运行效果如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值