Cookie对象

25 篇文章 0 订阅
18 篇文章 0 订阅

1.Cookie是浏览器提供的一种技术,通过服务器程序能将一些只须保存在客户端,或者在客户端处理的数据,放在本地的计算机上,不需要通过网络传输,下次就可以直接使用,提高网页处理效率,减少服务器的负载,例如常见的记住密码就是通过Cookie实现的,因为Cookie是存储在客户端的,所以安全性非常低。

2.javax.servlet.http.Cookie:随着服务器端的响应发送给客户端,保存在浏览器,下次再访问服务器时再把Cookie发送给服务器。

3.Cookie的格式:键值对用“=”链接,多个键值对间通过“;”隔开。

4.Cookie的创建的发送:
通过new Cookie(“key”,“value”); 来创建Cookie对象,要想将Cookie随响应发送到客户端,需要将其添加到response对象中,response.addCookie(cookie); 此时该 cookie 对象则随着响应发送至了客户端。

package com.StartSL;
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.util.ArrayList;

/**
 * @author Vodka
 * @date 2021/08//23:39
 */

@WebServlet(name="Vodka",urlPatterns={"/One","/Two"})
public class SendCookie extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res){
        //设置并发送Cookie
        Cookie ckOne = new Cookie("User","6666");
        Cookie ckTwo = new Cookie("KeyWord","关键字");
        res.addCookie(ckOne);
        res.addCookie(ckTwo);
        //获取cookie的数组
        Cookie [] Cookies = req.getCookies();
        //判断是否为空
        if(Cookies != null && Cookies.length > 0){
            for(Cookie CK : Cookies){
                String Name =  CK.getName();
                String Value = CK.getValue();
                System.out.println("名称:" + Name + " ,值: " + Value);
            }
        }

    }
}

5.Cookie注意点:
1.一般cookie只保存在浏览器本机的内存中,不同浏览器之间的cookie不能相互使用。
2.cookie存中文问题: URLEncoder.encode(xxxxx)编码, URLDecoder.decode(xxxxx); 解码
3.同名cookie问题: 重复发送的cookie,新的覆盖旧的
4.浏览器存放cookie的数量:不同的浏览器限定的数量不同,cookie的存储是有上限的,可以结合Session来实现回话跟踪。

6.cookie的路径: Cookie的setPath设置cookie的路径(指定站点名),这个路径决定服务器请求是否直接从浏览器中加载某些cookie。

//情景一: 当前服务器下任何项目的任意资源都可以获取cookie对象
//当前项目路径为/One
Cookie   ck = new Cookie("xxx","xxxx");
//设置路径为  “/” ,表示当前服务器下任何项目都可以访问到Cookie对象,
cookie.setPath("/");
response.addCookie(ck);


//情景二: 指定项目下的任意资源都可以获取Cookie对象
//当前项目路径为: /One
Cookie   ck = new Cookie("xxx","xxxx");
//设置路径为  “/Two” ,表示当前Two项目下资源才可以访问到Cookie对象
cookie.setPath("/Two");   //就算Cookie是One产生的,One也不能获取它
response.addCookie(ck);

//情景三: 当前项目下的任意资源都可以获取Cookie对象 (默认情况:不设置Cookie的path)
//当前项目路径为: /One
Cookie   ck = new Cookie("xxx","xxxx");
//设置路径为  “/One” ,表示当前项目下资源可以访问到Cookie对象
cookie.setPath("/One");   //因为默认情况就是这个,所以可以不设置
response.addCookie(ck);


//情景四:  指定目录下的资源可获取Cookie对象
//当前项目路径为:/One
Cookie ck = new Cookie("xxx","xxxx");
//设置路径为: "/One/main"  ,表示在One/main目录下才可以访问到cookie对象
ck.setPath("/One/main");
response.addCookie(ck);


//实例代码
package com.StartSL;

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;

/**
 * @author Vodka
 * @date 2021/08//18:22
 */
@WebServlet(urlPatterns = {"/vodka"})
public class CPath extends HttpServlet {
    @Override
    protected  void service(HttpServletRequest req, HttpServletResponse res ){
        Cookie ckOne = new Cookie("01" ,"01");
        ckOne.setPath("/One");
        res.addCookie(ckOne);

        Cookie ckTwo = new Cookie("02" ,"02");
        ckTwo.setPath("/");
        res.addCookie(ckTwo);

        Cookie ckThree = new Cookie("03","03");
        ckThree.setPath("/three");
        res.addCookie(ckThree);

        Cookie ckFour = new Cookie("04","04");
        ckFour.setPath("/four/main");
        res.addCookie(ckFour);
    }
}

总结:当访问路径的范围比cookie路径范围要大时(包含),则request对象带上cookie的内容;若范围较小(即不包含),则请求不会携带该cookie。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring框架中,`ServerHttpRequest`对象没有直接提供获取Cookie对象的方法。但是您可以通过以下步骤来获取Cookie对象: 1. 使用`getHeaders()`方法获取请求头部信息。 2. 使用`getFirst(HttpHeaders.COOKIE)`方法获取名为`Cookie`的请求头。 3. 使用`org.springframework.http.HttpCookie.parse(String headerValue)`方法解析Cookie字符串并返回一个`List<HttpCookie>`对象。 4. 遍历该列表以获取每个Cookie对象。 以下是一个示例代码: ```java import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; public class CookieUtils { public static void printCookies(ServerHttpRequest request) { HttpHeaders headers = request.getHeaders(); List<String> cookieHeaders = headers.get(HttpHeaders.COOKIE); if (!CollectionUtils.isEmpty(cookieHeaders)) { cookieHeaders.forEach(cookieHeader -> { List<HttpCookie> cookies = HttpCookie.parse(cookieHeader); cookies.forEach(cookie -> { System.out.println("Name: " + cookie.getName()); System.out.println("Value: " + cookie.getValue()); System.out.println("Domain: " + cookie.getDomain()); System.out.println("Path: " + cookie.getPath()); System.out.println("Max-Age: " + cookie.getMaxAge()); System.out.println("Secure: " + cookie.getSecure()); System.out.println("HttpOnly: " + cookie.isHttpOnly()); }); }); } } } ``` 通过获取请求头中的`Cookie`头部信息,然后使用`HttpCookie.parse()`方法将其解析为`List<HttpCookie>`对象。然后遍历该列表以获取每个Cookie对象的属性。 请注意,以上示例是使用Spring WebFlux框架的示例。在其他框架或库中,可能会有一些差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值