Cookie细谈——让你从精神百倍到聊出瞌睡

2023-12-25 10:50

本文主要是介绍Cookie细谈——让你从精神百倍到聊出瞌睡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录


文章目录

  • 文章目录
  • 前言
  • 一、什么是状态管理?
    • 1.1 现有问题的出现
    • 1.2 状态管理的分类
  • 二、Cookie的使用
    • 2.1 什么是Cookie
    • 2.2 Cookie原理的介绍
    • 2.3 实战部分,Cookie的那些骚操作
    • 2.4 Cookie的编码与解码
      • 编码操作
      • 解码操作
    • 2.5 Cookie的优缺点
      • 优点:
      • 缺点:
  • 总结


前言

本次文章主要是记录关于JavaWeb开发中对于Cookie的了解,其可以用于在各种电商平台类项目中的购物车实现中使用以及网页平台中用户登录信息的保存等等。


一、什么是状态管理?

1.1 现有问题的出现

老规矩不管是接触什么样的知识都是从一个“是什么”开始讲解(ps:不然我不好开头,另外给我端杯茶来润润喉~~ ^ _^)

正文:谈起Cookie我们作为一个开发者就不得不先讲讲网络中的“状态管理”这个概念。所谓“状态管理”就是指将浏览器(客户端)与web服务器(服务端)之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据交流或改变就是所谓的“状态”,而对于这些状态的管理我们就称之为“状态管理”。这一概念的起源来自于一些现有问题的出现。

  • 1、HTTP协议是无状态的,因此并不能保存每次我们提交的数据信息。
  • 2、如果一个用户在使用浏览器的时候多次提交请求,那么面对新的请求对于服务器而言就无法知道它是否与上次的请求存在着什么样的联系。
  • 3、对于一些繁琐的操作如果需要进行多次的提交(例如:登录)就成一种麻烦了,每次要进入一个网站时都需要输入一次登录验证这样就显得很麻烦。
    综上而言便有了我们所谓的“状态管理”的出现。

咳咳~ 别打瞌睡,认真记笔记,下课我要检查~~

为了防止困乏,我们就请一个小姐姐来一起陪伴学习(听说点赞她今晚陪你通宵补课

1.2 状态管理的分类

  • 如果是站在客户端管理方面:将状态保存在客户端,代表性就是我们今天要讲的Cookie技术了,即在浏览器的操作中保存。
  • 如果是站在服务器状态管理方面:将状态保存在服务器中,代表技术就是我后面要给大家分享的Session技术(服务器传递sessionID时需要使用cookie的方式)以及application(目前不讲了解即可)。

二、Cookie的使用

2.1 什么是Cookie

  • Cookie是在浏览器访问Web服务器的某个资源的时候,由Web服务器在HTTP响应消息头(即响应报文中的 Response Headers)中附带传给浏览器的一小段数据。
  • 一旦Web浏览器保存了某个Cookie,那么他在以后每次访问该Web服务器时,都应该在HTTP请求同种将这个Cookie回传给Web服务器,以便于后续需要对浏览器的继续操作。
  • 一个Cookie主要由标识该信息的名称(name)和 值(value)组成,也就是 我们经常遇到的 “键值对”。

2.2 Cookie原理的介绍

说明:这图是我借老师课件上的一个插图,*BUT!!*之前那个小姐姐不是哦~~。
在这里插入图片描述

2.3 实战部分,Cookie的那些骚操作

@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建Cookie//方法: Cookie cookie = new Cookie(key,value);Cookie cookie=new Cookie("cookie01","yongzhong");//设置Cookie的访问路径cookie.setPath("/CookieServlet_war_exploded/get");//设置Cookie的有效期(以一个小时为例)cookie.setMaxAge(60*60);//有三种取值方式  1、>0有效期单位秒  2、=0浏览器关闭 3、<0内存存储默认为-1//添加Cookie并响应给客户端(即前端)resp.addCookie(cookie);System.out.println("cookie添加完毕!");}
}

结果展示
在这里插入图片描述
再来创建获取所有Cookie的方法,由于Cookie存储在浏览器中并不止一个,故此呢肯定是用一个数组来进行接收撒。

@WebServlet("/getCookieServlet")
public class getCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取全部的CookieCookie[] cookies = req.getCookies();if (cookies!=null){for (Cookie c:cookies) {System.out.println("获取到的CookieName:"+URLDecoder.decode(c.getName(),"UTF-8")+":"+URLDecoder.decode(c.getValue(),"UTF-8"));}}else{System.out.println("cookie已经存在");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

接下来就是修改Cookie了,修改Cookie的语法和创建Cookie一模一样,而修改的实质呢就是用一个“同键不同值”的Cookie进行原Cookie值的一个覆盖。

//创建Cookie
Cookie ck=new Cookie("code",code);ck.setPath("/webs");//设置你想设置的路径不需要和我一样ck.setMaxAge(-1);//设置为内存存储,三种取值方式:>0的值 就是设置过期时间如设置为60即为1分钟 ;=0    则Cookie失效;<0则为内存存储长期存在
response.addCookie(ck);//让浏览器添加Cookie

2.4 Cookie的编码与解码

由于Cookie默认不支持中文,故此只能包含Asclll字符,所以Cookie需要对Unicode字符进行一个编码操作,否则当你使用中文的Cookie传值的时候接收到的结果将会乱码。

  • 编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法
  • 解码使用java.net.URLDecoder类的decode(String str,String encoding)方法

案例如下:

编码操作

@WebServlet("/cookieServlet")
public class cookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"),URLEncoder.encode("张三","UTF-8"));cookie.setPath("/CookieServlet_war_exploded/get");cookie.setMaxAge(600);response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

解码操作

@WebServlet("/getCookieServlet")
public class getCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取全部的CookieCookie[] cookies = req.getCookies();if (cookies!=null){for (Cookie c:cookies) {System.out.println("获取到的CookieName:"+URLDecoder.decode(c.getName(),"UTF-8")+":"+URLDecoder.decode(c.getValue(),"UTF-8"));}}else{System.out.println("cookie已经存在");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

2.5 Cookie的优缺点

优点:

1、可配置到期规则
2、简单性:Cookie是一种基于文本的轻量结构,包含简单的键值对
3、数据持戒心:Cookie默认在过期之前是可以一直存在客户端的浏览器上

缺点:

1、大小受到限制:大多数浏览器对Cookie的大小只有4K、8K的字节限制
2、用户可以手动配置禁用Cookie(例如谷歌浏览器),这样就会使得Cookie的使用受到限制。
3、有潜在的风险,有些黑客可以利用潜在的安全风险篡改你的Cookie从而获得你的网站小秘密,对安全性或依赖于Cookie的应用程序失效。


总结

文章总结完毕,Cookie知识如上 ,今天到此结束感谢浏览。

这篇关于Cookie细谈——让你从精神百倍到聊出瞌睡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535241

相关文章

JavaScript中document.cookie

“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie。”—— MSIE 帮助。一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件、程序等创建的,但是 javascript 也提供了对 Cookies 的很全面的访问权利。       每个 Cookie 都是这样的:<cookie名>=<值>   <cookie名>的限制与 javasc

flask-login 生成 cookie,session

flask-login 生成 cookie,session Flask-Login login_user() 显示来自 Set-Cookie 标头的加密 cookie # 模拟一个用户类class User(UserMixin):def __init__(self, id):self.id = id@app.route('/login')def login():# 模拟用户登录过程user

【Http 每日一问,访问服务端的鉴权Token放在header还是cookie更合适?】

结论先行: token静态的,不变的,放在header里面。 典型场景 ,每次访问时需要带个静态token请求服务端,向服务端表明是谁请求,此时token也可以认为是个固定的access-key。token动态的,会失效,放在cookie里面。 典型场景,业务登录态token,存在有效期的,过一段时间可能会失效。 下面具体展开下。 在选择将鉴权 Token 放在 HTTP Header 还是

剖析Cookie的工作原理及其安全风险

Cookie的工作原理主要涉及到HTTP协议中的状态管理。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会保留之前的请求信息。为了在无状态的HTTP协议上实现有状态的会话,引入了Cookie机制。 1. Cookie定义 Cookie,也称为HTTP cookie、web cookie、互联网cookie或浏览器cookie,是一种用于在用户浏览网站时识别用户并为其准备

cookie实战案例-自动登录网站

在写爬虫的时候,要伪装成真实用户请求。可能需要大量的IP地址,那么大量的IP地址从哪里来呢?这里就需要用代理IP来解决了,有的网站专门通过提供代理IP池服务作为主要的经营业务,只要注册相关网站开通对应套餐就可以了。 这次我们以自动登录一个爬虫代理 IP 网站来做为实战案例: 直接看代码: 账号我已经实现注册好了,可以用代码中的测试账号,也可以自己手动注册一个。 from selenium

关于cookie和session的直观讲解(二)

前言 上一章,讲解了Cookie,本章介绍Session. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中HttpSession。 Session 基础 获取HttpSession对象: HttpSession session = request.getSession(); 使用HttpSession对象: Object getAttribute

token和cookie的区别以及接口测试怎么找接口中的token和cookie

token和cookie是什么? token和cookie是用于身份验证和会话管理的两种技术。token是一种授权用户对特定资源访问的临时凭证,通常用于API身份验证、移动设备认证和单点登录等场景,而cookie是存储在客户端浏览器中的小型文本文件,通常用于跟踪用户在网站上的活动并提供个性化服务。token通常更安全,因为它是加密的,而cookie是明文的。然而,token的有效期通常很短,需要

Cookie是什么

cookie HTTP cookie通常被叫做cookie,最初是用在客戶端存储会话信息。这个规范要求服务器在响应HTTP请求的时候,发送set-cookie的开头包含会话信息 HTTP协议是无状态的,意为,HTTP服务器不必记住不同客户端发送的请求, 为了降低访问服务器的时间间隔,1994年Netscape公司发明了一种名为cookie的解决方案,cookie是在程序之间传递的一小段信息,

JavaWeb 会话跟踪技术Cookie和Session

超详细的Java知识点路线图 会话跟踪 会话就是客户端和服务器之间从连接到断开的过程。 Http协议是无状态的,也就是说断开连接后服务器不会记录用户的状态,有时候我们需要知道之前会话的用户状态,这就需要会话跟踪技术。 会话跟踪的几种实现: Session 在服务器端保存数据。Cookie 在浏览器端保存数据。URL重写 在URL中强行加入参数以实现数据传递,主要用于Cookie和Se

cookie、session、Token 及 WebStorage 的区别

cookie 和session的区别 cookie放在客户端的浏览器上,session放服务器上。Session生成的Session id是在cookie里保存的,cookie被禁止后可以通过URL重写来继续使用sessioncookie不是安全,存放在本地的COOKIE可能被获取并进行COOKIE欺骗。session会给服务器带来压力,考虑到服务器性能,应当使用COOKIE。cookie只能保