cookie详解

       📝个人主页五敷有你      

 🔥系列专栏:Http协议

⛺️稳重求进,晒太阳

概念

        Cookie(饼干)是一种小型的文本文件,由网站服务器通过用户的浏览器存储在用户计算机或移动设备上。它的主要目的是在用户的浏览器和服务器之间传递信息,以便在用户访问同一网站时能够辨认用户身份、记住用户偏好或提供个性化服务

定义: Cookie是由Netscape公司在1994年首次引入的,现已成为Web浏览器中普遍使用的技术标准之一。HTTP协议是一种无状态的协议,意味着服务器在处理每个请求时都不会记住之前的请求。Cookie通过在用户计算机上存储一小段数据,使得服务器能够在用户访问同一站点时识别用户,从而提供更个性化的服务。

Cookie通常包含以下信息:

  • 名称(Name): Cookie的标识符,用于在服务器和浏览器之间唯一标识特定的Cookie。
  • 值(Value): 与Cookie相关联的数据,可以是用户的偏好设置、会话信息等。
  • 域(Domain): Cookie所属的域名,确定哪些服务器可以接收该Cookie。
  • 路径(Path): 指定与Cookie关联的特定路径,限定哪些页面可以访问该Cookie。
  • 过期时间(Expires): 指定Cookie的有效期,超过该时间后Cookie将被删除。
  • 安全标志(Secure): 如果存在,表示Cookie只能通过安全的HTTPS连接传输。

cookie的工作原理

服务器创建Cookie:

        当用户首次访问一个网站时,服务器可能会在响应中包含一个Set-Cookie头,其中包含了要在用户端存储的Cookie信息。这个信息通常包括Cookie的名称、值、过期时间等。

浏览器存储Cookie:

        当用户再次访问同一网站时,浏览器会将之前存储的与该站点相关的Cookie信息包含在请求头中。这通常通过Cookie头字段来实现。

后续请求中发送Cookie:

        当用户再次访问同一网站时,浏览器会将之前存储的与该站点相关的Cookie信息包含在请求头中。这通常通过Cookie头字段来实现。

服务器读取Cookie:

        服务器在接收到包含Cookie的请求后,可以通过解析请求头中的Cookie字段来识别用户。根据Cookie的内容,服务器可以提供个性化的服务或根据需要进行其他操作。你看csdn的cookie中就存有我的一个标识信息,可以很清晰的识别用户     

Cookie的更新和过期:

  • 在服务器响应中,可以通过Set-Cookie头来更新Cookie的信息,例如延长其过期时间或修改其值。浏览器会按照新的信息更新本地存储的Cookie。
  • 如果设置了Cookie的过期时间,在过期时间到达后,浏览器将不再发送该Cookie,同时清理本地存储的过期Cookie。

如下,就是过期的时间,过期后,浏览器将清除cookie

  

Cookie的类型

        Cookie主要分为会话Cookie(Session Cookie)和持久Cookie(Persistent Cookie),以及根据在浏览器中的使用情况分为第一方Cookie和第三方Cookie。以下是对这些类型的详细解释

会话Cookie(Session Cookie):

        会话Cookie存储在用户计算机的内存中,并且通常在用户关闭浏览器时被删除。它们用于跟踪用户的会话信息,例如在网站上浏览的页面、购物车内容等。由于会话Cookie的短暂性,它们对于临时存储用户状态非常有用。

        在 Web 开发中,术语“会话 Cookie”通常是指没有显式设置过期时间,而是在用户关闭浏览器时自动删除的 Cookie。而如果设置了过期时间,即使是一个较短的时间,该 Cookie 仍然可以被认为是具有过期时间的 Cookie。

        如果想创建一个在用户关闭浏览器时自动删除的会话 Cookie,可以不设置 setMaxAge 或将其设置为负值,例如 setMaxAge(-1)

持久Cookie(Persistent Cookie):

        持久Cookie具有指定的过期时间,可以存储在用户计算机上一段较长的时间。即使用户关闭浏览器,持久Cookie仍然可以保留,直到过期时间到达或用户手动删除。这使得持久Cookie可用于存储用户偏好、登录信息等长期数据。

Cookie的应用场景

用户身份验证:

        Cookie可用于存储用户的登录状态信息,使用户在访问网站时无需重复登录。这对于提高用户体验和网站安全性非常重要。

记住用户设置:

        通过Cookie,网站可以记住用户的一些设置,例如字体大小、主题选择、地理位置等,以确保用户在访问时保持一致的界面和体验。

安全性:

        Cookie可以用于实现安全性控制,例如防止跨站请求伪造(CSRF)攻击。通过将令牌存储在Cookie中,可以提高用户身份验证的安全性。

Cookies的常用方法

前端JS

后端

HttpServletRequest对象获取Cookie:

Cookie[] cookies = request.getCookies();

在Servlet中,你可以使用HttpServletRequest对象来获取客户端发送的Cookie。

这将返回一个Cookie数组,可以遍历该数组以获取特定名称的Cookie。

创建和设置Cookie
Cookie cookie = new Cookie("username", "zy");
 cookie.setMaxAge(3600); // 设置Cookie的过期时间,单位为秒 
response.addCookie(cookie);

使用Cookie类可以创建新的Cookie,并将其添加到HttpServletResponse中。

上述代码创建了一个名为 "username" 值为 "zy" 的Cookie,并设置了它的过期时间为3600秒(1小时)。

遍历和读取Cookie:

通过HttpServletRequest对象获取的Cookie数组,你可以遍历并读取Cookie的值。

Cookie[] cookies = request.getCookies(); 
if (cookies != null) { 
    for (Cookie cookie : cookies) {
         String name = cookie.getName(); 
            String value = cookie.getValue(); // 进行相应的处理 
        } 
}
设置Cookie路径和域:
Cookie cookie = new Cookie("user", "john_doe"); 
cookie.setPath("/app"); // 设置Cookie的路径 
cookie.setDomain(".example.com"); // 设置Cookie的域 
response.addCookie(cookie);

通过setPathsetDomain方法,可以设置Cookie的路径和域。

上述代码将Cookie的路径设置为 "/app",表示该Cookie只在路径为 "/app" 的页面中可见;

将Cookie的域设置为 ".example.com",表示该Cookie对所有以 ".example.com" 结尾的域名都可见。    

当你设置一个 Cookie 的路径为 "/app" 时,这表示该 Cookie 只在以 "/app" 开头的路径下有效。具体来说:

如果你的网站域名是 "example.com",那么这个 Cookie 在 "example.com/app" 下是可见的。

如果你有多个服务器,比如 "www.example.com"、"app.example.com" 等,只要它们属于 "example.com" 域,那么在这些服务器下以 "/app" 开头的路径都能访问这个 Cookie。

但是,如果路径不是以 "/app" 开头的,比如 "/other" 或者根路径 "/",那么这个 Cookie 将不可见。

  • 36
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五敷有你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值