Java web 之cookie学习

Cookie 是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但是由于 Cookie 是服务器端保存在客户端的信息,所以其安全性也是很差的。例如常见的记住密码则可以通过Cookie 来实现。
有一个专门操作 Cookie 的类 javax . servlet . http . Cookie 。随着服务器端的响应发送给客户端,保存在浏览器。当下次再访问服务器时把 Cookie 再带回服务器。
 Cookie 的格式:键值对用“=”链接,多个键值对间通过”;”隔开。
8.1. Cookie 的创建的发送
通过 new Cookie " key "" value ");来创建一个 Cookie 对象,要想将 Cookie 随响应发送到客户端,需要先添加到 response 对象中, response . addCookie ( cookie );此时该 cookie 对象则随着响应发送至了客户端在浏览器上可以看见。

package Cookie;

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;

/**
 * @Author 陈平安
 * @Date 2022/6/2 9:01
 * @PackageName:Cookie
 * @ClassName: cookie01
 * @Description: TODO
 * @Version 1.0
 */
@WebServlet("/c01")
public class cookie01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "adain");

        response.addCookie(cookie);

        Cookie cookie1 = new Cookie("name1", "adain1");

        response.addCookie(cookie1);

    }
}


package Cookie;

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;

/**
 * @Author 陈平安
 * @Date 2022/6/2 9:01
 * @PackageName:Cookie
 * @ClassName: cookie01
 * @Description: TODO
 * @Version 1.0
 */
@WebServlet("/c02")
public class cookie02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (int i = 0; i < cookies.length; i++) {
                String name = cookies[i].getName();
                String values = cookies[i].getValue();
                System.out.println("name=" + name + "values=" + values);
            }
        }

    }
}

 

 小结:

cookis的遍历需要一次性全部遍历出来,不可以单独取出数据。所以就意味着你需要进行非空校验,不然就会可能抛出空指针异常。


package Cookie;

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;

/**
 * @Author 陈平安
 * @Date 2022/6/2 9:01
 * @PackageName:Cookie
 * @ClassName: cookie01
 * @Description: TODO
 * @Version 1.0
 */
@WebServlet("/c01")
public class cookie01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "adain");
        cookie.setMaxAge(0);//销毁
        response.addCookie(cookie);

        Cookie cookie1 = new Cookie("name1", "adain1");
        cookie.setMaxAge(-1);////关闭浏览器就失效
        response.addCookie(cookie1);

        Cookie cookie2 = new Cookie("name2", "adain2");
        cookie.setMaxAge(30);//存活30s
        response.addCookie(cookie2);

    }
}

此为设置cookie的存活时间。

负数是表示关闭浏览器就失效, 0表示销毁,正整数表示存活的时间,秒为单位。

 


在一般的站点中常常有记住用户名这样一个操作该操作只是将信息保存在本机上,换电脑以后这些信息就无效了。而且 cookie 还不能跨浏览器。
2. Cookie 存中文问题
 Cookie 中不能出现中文,如果有中文则通过 URLEncoder . encode ()来进行编码,获取时通过 URLDecoder . decode ()来进行解码。

3.同名 Cookie 问题如果服务器端发送重复的 Cookie 那么会覆盖原有的 Cookie 。
4.浏览器存放 Cookie 的数量
不同的浏览器对 Cookie 也有限定, Cookie 的存储有是上限的。 Cookie 是存储在客户端(浏览器)的,而且一般是由服务器端创建和设定。后期结合 Session 来实现回话跟踪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值