[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:Java Web

目录

  • Cookie
  • 1、工作原理
  • 2、如何使用
    • 2.1、发送Cookie
    • 2.2、获取Cookie
  • 3、Cookie的存活时间
  • 4、中文错误

Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。
Cookie是一种用于在Web浏览器和Web服务器之间存储数据的小型文本文件。它通过在Web浏览器中存储一个键值对,使Web应用程序能够跟踪用户的活动和状态。

1、工作原理

下面是Cookie的工作原理:

  1. 当用户访问一个Web应用程序时,Web服务器会向Web浏览器发送一组Cookie。每个Cookie都包含一个键值对,例如“username=john”,其中“username”是Cookie的名称,而“john”是它的值。
  2. 当Web浏览器接收到Cookie后,它会将Cookie保存在用户的计算机上。每当用户再次访问该Web应用程序时,Web浏览器会将Cookie发送回Web服务器。
  3. Web服务器可以使用Cookie来跟踪用户的活动和状态。例如,当用户登录时,Web服务器可以创建一个Cookie,将用户的登录信息存储在Cookie中,并将其发送回Web浏览器。当用户浏览网站时,Web应用程序可以使用该Cookie来识别用户并提供个性化的体验。
  4. 由于Cookie存储在用户的计算机上,因此它们可以在用户关闭Web浏览器后继续存在。这使得Web应用程序可以在用户下次访问时保留用户的活动和状态。

需要注意的是,Cookie是由Web服务器设置和使用的,而不是由Web浏览器设置和使用的。
此外,Cookie存储在用户的计算机上,并且可以被删除或修改,因此它们不是绝对可信的。
因此,在处理敏感信息时,应该使用其他更可靠的技术,例如使用HTTPS协议来加密数据传输。

对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:
  ● 响应头:set-cookie
  ● 请求头: cookie
[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie_第1张图片

  1. 对于ServletA响应数据的时候,Tomcat服务器都是基于HTTP协议来响应数据
  2. 当Tomcat发现后端要返回的是一个Cookie对象之后,Tomcat就会在响应头中添加一行数据:Set-Cookie:username=zs
  3. 浏览器获取到响应结果后,从响应头中就可以获取到Set-Cookie对应值username=zs,并将数据存储在浏览器的内存中
  4. 浏览器再次发送请求给ServletB的时候,浏览器会自动在请求头中添加Cookie: username=zs发送给服务端ServletB
  5. Request对象会把请求头中cookie对应的值封装成一个个Cookie对象,最终形成一个数组
  6. ServletB通过Request对象获取到Cookie[]后,就可以从中获取自己需要的数据

2、如何使用

具体使用步骤分为发送Cookie和获取Cookie

2.1、发送Cookie

  1. 创建Cookie对象,并设置数据->Cookie cookie = new Cookie(“key”,“value”);
  2. 使用response对象,发送Cookie到客户端浏览器->response.addCookie(cookie);

编写代码验证:

在浏览器访问这个cookieServlet资源,然后查看浏览器缓存的Cookie:
[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie_第2张图片

可以看到Cookie发送成功了

2.2、获取Cookie

  1. 使用request对象,获取客户端携带的所有Cookie->Cookie[] cookies = request.getCookies();
  2. 遍历数组cookies,获取每一个Cookie对象
  3. 使用Cookie对象方法获取数据->cookie.getName(); cookie.getValue();

编写代码验证:
[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie_第3张图片

可以看到控制台成功打印出了获取到的Cookie对象
  

3、Cookie的存活时间

当发送请求到ServletB之前,如果把浏览器关闭然后再重新访问资源,可以发现ServletB是获取不到Cookie对象的。
因为在默认情况下,Cookie是存储在浏览器缓存中,当浏览器关闭时,内存释放,Cookie则同时被销毁。
所以,如何实现将Cookie数据存储持久化:通过Cookie的一个API:setMaxAge来实现。

设置Cookie存活时间->setMaxAge(int seconds)
参数second为:

  1. 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
  2. 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
  3. 零:删除对应Cookie

4、中文错误

Cookie对象如果存储中文数据,会存在问题,访问时浏览器显示500错误信息码。
所以,Cookie是不能直接存储中文的。

解决方式:URL编码。

  1. 采用URLEncoder.encode()对中文进行编码,将编码后的值存入Cookie中
  2. 在另一个服务器中获取Cookie的值,获取之后使用URLDecoder.decode()解码

代码实现如下:
①编码,存Cookie
[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie_第4张图片

②解码,获取Cookie
[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie_第5张图片

你可能感兴趣的:(Java,Web,java,前端,服务器,Cookie)